summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-10-23 17:16:22 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2016-10-23 17:16:22 +0200
commitb728f50a790afeec349c575b99028063a9d230c9 (patch)
treea54a358aa301b3aa33c53af7100bafabf4b998ff /sys
parent98dba9a4a311dd7b7435a5a5d66619f2a2b4b6cf (diff)
lib9p: limit the number of srv processes kept arround 8
Diffstat (limited to 'sys')
-rw-r--r--sys/include/9p.h2
-rw-r--r--sys/src/lib9p/srv.c6
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;