From 2d2e5c71f73a8ac0656ad26b406945937f4b2c0e Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 25 Jun 2006 21:04:52 +0000 Subject: nonblock --- src/libmux/io.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/libmux/io.c') diff --git a/src/libmux/io.c b/src/libmux/io.c index 3d932b1a..4a89ca22 100644 --- a/src/libmux/io.c +++ b/src/libmux/io.c @@ -74,7 +74,7 @@ _muxsendproc(void *v) } void* -_muxrecv(Mux *mux) +_muxrecv(Mux *mux, int canblock) { void *p; @@ -88,15 +88,24 @@ _muxrecv(Mux *mux) */ if(mux->readq){ qunlock(&mux->lk); - return _muxqrecv(mux->readq); + if(canblock) + return _muxqrecv(mux->readq); + return _muxnbqrecv(mux->readq); } qlock(&mux->inlk); qunlock(&mux->lk); - p = mux->recv(mux); + if(canblock) + p = mux->recv(mux); + else{ + if(mux->nbrecv) + p = mux->nbrecv(mux); + else + p = nil; + } qunlock(&mux->inlk); /* - if(!p) + if(!p && canblock) vthangup(mux); */ return p; -- cgit v1.2.3