summaryrefslogtreecommitdiff
path: root/sys/src/cmd/ndb
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-07-28 19:17:54 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-07-28 19:17:54 +0200
commitb4d2e39d8cfad9fe9585dd6b2382d1261122f22f (patch)
treea5548e2cc615632c008b358788956abbef071c25 /sys/src/cmd/ndb
parent15c0d4b7c42f973296f372330fefe1c7f08895b4 (diff)
ndb/cs/dns: make sure never to block the 9p loop when we run out of processes, fail the request instead
Diffstat (limited to 'sys/src/cmd/ndb')
-rw-r--r--sys/src/cmd/ndb/cs.c4
-rw-r--r--sys/src/cmd/ndb/dnresolve.c8
2 files changed, 10 insertions, 2 deletions
diff --git a/sys/src/cmd/ndb/cs.c b/sys/src/cmd/ndb/cs.c
index 32bccff85..2cd385ed0 100644
--- a/sys/src/cmd/ndb/cs.c
+++ b/sys/src/cmd/ndb/cs.c
@@ -1654,6 +1654,10 @@ dnsiplookup(char *host, Ndbs *s)
qunlock(&dblock);
slave(host);
+ if(*isslave == 0){
+ qlock(&dblock);
+ return nil;
+ }
if(strcmp(ipattr(host), "ip") == 0)
t = dnsquery(mntpt, host, "ptr");
diff --git a/sys/src/cmd/ndb/dnresolve.c b/sys/src/cmd/ndb/dnresolve.c
index f5954a992..e99177d7d 100644
--- a/sys/src/cmd/ndb/dnresolve.c
+++ b/sys/src/cmd/ndb/dnresolve.c
@@ -1603,11 +1603,15 @@ netquery(Query *qp, int depth)
return Answnone;
slave(qp->req);
+
/*
* slave might have forked. if so, the parent process longjmped to
* req->mret; we're usually the child slave, but if there are too
- * many children already, we're still the same process.
+ * many children already, we're still the same process. under no
+ * circumstances block the 9p loop.
*/
+ if(!qp->req->isslave && strcmp(qp->req->from, "9p") == 0)
+ return Answnone;
/*
* don't lock before call to slave so only children can block.
@@ -1636,7 +1640,7 @@ netquery(Query *qp, int depth)
" dropping this one; no further logging"
" of drops", dp->name);
}
- return 0;
+ return Answnone;
}
++qlp->Ref.ref;
qunlock(qlp);