lib9p: defer freeing srv for listensrv()

use the Srv.end callback for freeing the srv and closing the
file descriptor of a connection. this makes sure we wont free
the srv while there are still outstanding requests that would
access the srv when doing the respond() call.
This commit is contained in:
cinap_lenrek 2013-01-30 10:34:57 +01:00
parent 2c62f8dc67
commit 6b4c5380d8

View file

@ -7,6 +7,7 @@
static void listenproc(void*);
static void srvproc(void*);
static void srvend(Srv *);
static char *getremotesys(char*);
void
@ -57,6 +58,7 @@ listenproc(void *v)
s->rpool = nil;
s->rbuf = nil;
s->wbuf = nil;
s->end = srvend;
_forker(srvproc, s, 0);
}
free(os->addr);
@ -66,13 +68,13 @@ listenproc(void *v)
static void
srvproc(void *v)
{
int data;
Srv *s;
s = v;
data = s->infd;
srv(s);
close(data);
srv((Srv*)v);
}
static void
srvend(Srv *s)
{
close(s->infd);
free(s->addr);
free(s);
}