diff options
| -rw-r--r-- | sys/include/9p.h | 2 | ||||
| -rw-r--r-- | sys/src/lib9p/srv.c | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/sys/include/9p.h b/sys/include/9p.h index 299d4316a..22d64c57f 100644 --- a/sys/include/9p.h +++ b/sys/include/9p.h @@ -236,6 +236,8 @@ struct Srv { Ref sref; /* srvwork procs */ Ref rref; /* requests in flight */ + int spid; /* pid of srv() caller */ + void (*free)(Srv*); }; diff --git a/sys/src/lib9p/srv.c b/sys/src/lib9p/srv.c index 898961cab..779af8dd0 100644 --- a/sys/src/lib9p/srv.c +++ b/sys/src/lib9p/srv.c @@ -748,6 +748,11 @@ srvwork(void *v) case Tstat: sstat(srv, r); break; case Twstat: swstat(srv, r); break; } + if(srv->sref.ref > 8 && srv->spid != getpid()){ + decref(&srv->sref); + qunlock(&srv->slock); + return; + } qunlock(&srv->slock); } @@ -803,6 +808,7 @@ srv(Srv *srv) fmtinstall('D', dirfmt); fmtinstall('F', fcallfmt); + srv->spid = getpid(); srv->sref.ref = 0; srv->rref.ref = 0; |
