]> git.lizzy.rs Git - plan9front.git/commitdiff
exportfs: simplify freefile() code
authorcinap_lenrek <cinap_lenrek@felloff.net>
Sat, 2 Aug 2014 17:22:10 +0000 (19:22 +0200)
committercinap_lenrek <cinap_lenrek@felloff.net>
Sat, 2 Aug 2014 17:22:10 +0000 (19:22 +0200)
remove impossible checks, rewrite as while loop.

sys/src/cmd/exportfs/exportfs.c

index 24308dcc40e1dd336f60768d9c7d8460df2991ea..af0b6ac625c73e7b60f219fa39c58314560abc8b 100644 (file)
@@ -587,30 +587,25 @@ freefile(File *f)
 {
        File *parent, *child;
 
-Loop:
-       f->ref--;
-       if(f->ref > 0)
-               return;
-       freecnt++;
-       if(f->ref < 0) abort();
-       DEBUG(DFD, "free %s\n", f->name);
-       /* delete from parent */
-       parent = f->parent;
-       if(parent->child == f)
-               parent->child = f->childlist;
-       else{
-               for(child=parent->child; child->childlist!=f; child=child->childlist)
-                       if(child->childlist == nil)
-                               fatal("bad child list");
-               child->childlist = f->childlist;
+       while(--f->ref == 0){
+               freecnt++;
+               DEBUG(DFD, "free %s\n", f->name);
+               /* delete from parent */
+               parent = f->parent;
+               if(parent->child == f)
+                       parent->child = f->childlist;
+               else{
+                       for(child = parent->child; child->childlist != f; child = child->childlist) {
+                               if(child->childlist == nil)
+                                       fatal("bad child list");
+                       }
+                       child->childlist = f->childlist;
+               }
+               freeqid(f->qidt);
+               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 *
@@ -744,8 +739,7 @@ freeqid(Qidtab *q)
        ulong h;
        Qidtab *l;
 
-       q->ref--;
-       if(q->ref > 0)
+       if(--q->ref)
                return;
        qfreecnt++;
        h = qidhash(q->path);