From 1a8f27c35024af7b4ed857a388d20f0a4a560db0 Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 14 May 2004 15:14:21 +0000 Subject: various bug fixes --- src/libfs/fs.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/libfs/fs.c') diff --git a/src/libfs/fs.c b/src/libfs/fs.c index 31515250..a42af96b 100644 --- a/src/libfs/fs.c +++ b/src/libfs/fs.c @@ -86,19 +86,27 @@ fsunmount(Fsys *fs) void _fsdecref(Fsys *fs) { - Fid *f, *next; + Fid *f, **l, *next; qlock(&fs->lk); --fs->ref; //fprint(2, "fsdecref %p to %d\n", fs, fs->ref); if(fs->ref == 0){ close(fs->fd); + /* trim the list down to just the first in each chunk */ + for(l=&fs->freefid; *l; ){ + if((*l)->fid%Fidchunk == 0) + l = &(*l)->next; + else + *l = (*l)->next; + } + /* now free the list */ for(f=fs->freefid; f; f=next){ next = f->next; - if(f->fid%Fidchunk == 0) - free(f); + free(f); } free(fs); + return; } qunlock(&fs->lk); } -- cgit v1.2.3