diff options
author | rsc <devnull@localhost> | 2006-06-25 21:04:52 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2006-06-25 21:04:52 +0000 |
commit | 2d2e5c71f73a8ac0656ad26b406945937f4b2c0e (patch) | |
tree | 67df9fb496f06167b1281a7c2daae1d7a8d41eaa /src/libmux/io.c | |
parent | b733ffba4fa1af07540e9687b2f84c4f3014063e (diff) | |
download | plan9port-2d2e5c71f73a8ac0656ad26b406945937f4b2c0e.tar.gz plan9port-2d2e5c71f73a8ac0656ad26b406945937f4b2c0e.tar.bz2 plan9port-2d2e5c71f73a8ac0656ad26b406945937f4b2c0e.zip |
nonblock
Diffstat (limited to 'src/libmux/io.c')
-rw-r--r-- | src/libmux/io.c | 17 |
1 files changed, 13 insertions, 4 deletions
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; |