tfree fuse messages - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit be8b4b397af631bad302ef2646477f228b4537b5 | |
parent 0d5f0a724bc6ce5cb837afee442d7ecca470cf16 | |
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(-) | |
--- | |
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); | |
} | |
/* |