exportfs: simplify freefile() code
remove impossible checks, rewrite as while loop.
This commit is contained in:
parent
b185d2fe5c
commit
5302e88796
1 changed files with 19 additions and 25 deletions
|
@ -587,30 +587,25 @@ freefile(File *f)
|
||||||
{
|
{
|
||||||
File *parent, *child;
|
File *parent, *child;
|
||||||
|
|
||||||
Loop:
|
while(--f->ref == 0){
|
||||||
f->ref--;
|
freecnt++;
|
||||||
if(f->ref > 0)
|
DEBUG(DFD, "free %s\n", f->name);
|
||||||
return;
|
/* delete from parent */
|
||||||
freecnt++;
|
parent = f->parent;
|
||||||
if(f->ref < 0) abort();
|
if(parent->child == f)
|
||||||
DEBUG(DFD, "free %s\n", f->name);
|
parent->child = f->childlist;
|
||||||
/* delete from parent */
|
else{
|
||||||
parent = f->parent;
|
for(child = parent->child; child->childlist != f; child = child->childlist) {
|
||||||
if(parent->child == f)
|
if(child->childlist == nil)
|
||||||
parent->child = f->childlist;
|
fatal("bad child list");
|
||||||
else{
|
}
|
||||||
for(child=parent->child; child->childlist!=f; child=child->childlist)
|
child->childlist = f->childlist;
|
||||||
if(child->childlist == nil)
|
}
|
||||||
fatal("bad child list");
|
freeqid(f->qidt);
|
||||||
child->childlist = f->childlist;
|
free(f->name);
|
||||||
|
free(f);
|
||||||
|
f = parent;
|
||||||
}
|
}
|
||||||
freeqid(f->qidt);
|
|
||||||
free(f->name);
|
|
||||||
f->name = nil;
|
|
||||||
free(f);
|
|
||||||
f = parent;
|
|
||||||
if(f != nil)
|
|
||||||
goto Loop;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
File *
|
File *
|
||||||
|
@ -744,8 +739,7 @@ freeqid(Qidtab *q)
|
||||||
ulong h;
|
ulong h;
|
||||||
Qidtab *l;
|
Qidtab *l;
|
||||||
|
|
||||||
q->ref--;
|
if(--q->ref)
|
||||||
if(q->ref > 0)
|
|
||||||
return;
|
return;
|
||||||
qfreecnt++;
|
qfreecnt++;
|
||||||
h = qidhash(q->path);
|
h = qidhash(q->path);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue