free fuse messages
This commit is contained in:
parent
0d5f0a724b
commit
be8b4b397a
1 changed files with 8 additions and 1 deletions
|
|
@ -5,6 +5,7 @@ int fuseeof;
|
||||||
int fusebufsize;
|
int fusebufsize;
|
||||||
int fusemaxwrite;
|
int fusemaxwrite;
|
||||||
FuseMsg *fusemsglist;
|
FuseMsg *fusemsglist;
|
||||||
|
Lock fusemsglock;
|
||||||
|
|
||||||
int mountfuse(char *mtpt);
|
int mountfuse(char *mtpt);
|
||||||
void unmountfuse(char *mtpt);
|
void unmountfuse(char *mtpt);
|
||||||
|
|
@ -15,10 +16,13 @@ allocfusemsg(void)
|
||||||
FuseMsg *m;
|
FuseMsg *m;
|
||||||
void *vbuf;
|
void *vbuf;
|
||||||
|
|
||||||
|
lock(&fusemsglock);
|
||||||
if((m = fusemsglist) != nil){
|
if((m = fusemsglist) != nil){
|
||||||
fusemsglist = m->next;
|
fusemsglist = m->next;
|
||||||
|
unlock(&fusemsglock);
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
unlock(&fusemsglock);
|
||||||
m = emalloc(sizeof(*m) + fusebufsize);
|
m = emalloc(sizeof(*m) + fusebufsize);
|
||||||
vbuf = m+1;
|
vbuf = m+1;
|
||||||
m->buf = vbuf;
|
m->buf = vbuf;
|
||||||
|
|
@ -31,8 +35,10 @@ allocfusemsg(void)
|
||||||
void
|
void
|
||||||
freefusemsg(FuseMsg *m)
|
freefusemsg(FuseMsg *m)
|
||||||
{
|
{
|
||||||
|
lock(&fusemsglock);
|
||||||
m->next = fusemsglist;
|
m->next = fusemsglist;
|
||||||
fusemsglist = m;
|
fusemsglist = m;
|
||||||
|
unlock(&fusemsglock);
|
||||||
}
|
}
|
||||||
|
|
||||||
FuseMsg*
|
FuseMsg*
|
||||||
|
|
@ -234,6 +240,7 @@ replyfuse(FuseMsg *m, void *arg, int narg)
|
||||||
}
|
}
|
||||||
if(writev(fusefd, vec, nvec) < 0)
|
if(writev(fusefd, vec, nvec) < 0)
|
||||||
sysfatal("replyfuse: %r");
|
sysfatal("replyfuse: %r");
|
||||||
|
freefusemsg(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -251,6 +258,7 @@ replyfuseerrno(FuseMsg *m, int e)
|
||||||
fprint(2, "FUSE <- %#G\n", m->hdr, &hdr, 0);
|
fprint(2, "FUSE <- %#G\n", m->hdr, &hdr, 0);
|
||||||
if(write(fusefd, &hdr, sizeof hdr) < 0)
|
if(write(fusefd, &hdr, sizeof hdr) < 0)
|
||||||
sysfatal("replyfuseerror: %r");
|
sysfatal("replyfuseerror: %r");
|
||||||
|
freefusemsg(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -310,7 +318,6 @@ initfuse(char *mtpt)
|
||||||
rx.minor = FUSE_KERNEL_MINOR_VERSION;
|
rx.minor = FUSE_KERNEL_MINOR_VERSION;
|
||||||
rx.max_write = fusemaxwrite;
|
rx.max_write = fusemaxwrite;
|
||||||
replyfuse(m, &rx, sizeof rx);
|
replyfuse(m, &rx, sizeof rx);
|
||||||
freefusemsg(m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue