From b728f50a790afeec349c575b99028063a9d230c9 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 23 Oct 2016 17:16:22 +0200 Subject: lib9p: limit the number of srv processes kept arround 8 --- sys/include/9p.h | 2 ++ sys/src/lib9p/srv.c | 6 ++++++ 2 files changed, 8 insertions(+) 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; -- cgit v1.2.3