tfree fuse messages - plan9port - [fork] Plan 9 from user space
HTML git clone git://src.adamsgaard.dk/plan9port
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit be8b4b397af631bad302ef2646477f228b4537b5
DIR parent 0d5f0a724bc6ce5cb837afee442d7ecca470cf16
HTML Author: rsc <devnull@localhost>
Date: Tue, 1 Aug 2006 03:19:53 +0000
free fuse messages
Diffstat:
M src/cmd/9pfuse/fuse.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
---
DIR diff --git a/src/cmd/9pfuse/fuse.c b/src/cmd/9pfuse/fuse.c
t@@ -5,6 +5,7 @@ int fuseeof;
int fusebufsize;
int fusemaxwrite;
FuseMsg *fusemsglist;
+Lock fusemsglock;
int mountfuse(char *mtpt);
void unmountfuse(char *mtpt);
t@@ -15,10 +16,13 @@ allocfusemsg(void)
FuseMsg *m;
void *vbuf;
+ lock(&fusemsglock);
if((m = fusemsglist) != nil){
fusemsglist = m->next;
+ unlock(&fusemsglock);
return m;
}
+ unlock(&fusemsglock);
m = emalloc(sizeof(*m) + fusebufsize);
vbuf = m+1;
m->buf = vbuf;
t@@ -31,8 +35,10 @@ allocfusemsg(void)
void
freefusemsg(FuseMsg *m)
{
+ lock(&fusemsglock);
m->next = fusemsglist;
fusemsglist = m;
+ unlock(&fusemsglock);
}
FuseMsg*
t@@ -234,6 +240,7 @@ replyfuse(FuseMsg *m, void *arg, int narg)
}
if(writev(fusefd, vec, nvec) < 0)
sysfatal("replyfuse: %r");
+ freefusemsg(m);
}
/*
t@@ -251,6 +258,7 @@ replyfuseerrno(FuseMsg *m, int e)
fprint(2, "FUSE <- %#G\n", m->hdr, &hdr, 0);
if(write(fusefd, &hdr, sizeof hdr) < 0)
sysfatal("replyfuseerror: %r");
+ freefusemsg(m);
}
void
t@@ -310,7 +318,6 @@ initfuse(char *mtpt)
rx.minor = FUSE_KERNEL_MINOR_VERSION;
rx.max_write = fusemaxwrite;
replyfuse(m, &rx, sizeof rx);
- freefusemsg(m);
}
/*