aboutsummaryrefslogtreecommitdiff
path: root/src/libmux/io.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2006-06-25 21:04:52 +0000
committerrsc <devnull@localhost>2006-06-25 21:04:52 +0000
commit2d2e5c71f73a8ac0656ad26b406945937f4b2c0e (patch)
tree67df9fb496f06167b1281a7c2daae1d7a8d41eaa /src/libmux/io.c
parentb733ffba4fa1af07540e9687b2f84c4f3014063e (diff)
downloadplan9port-2d2e5c71f73a8ac0656ad26b406945937f4b2c0e.tar.gz
plan9port-2d2e5c71f73a8ac0656ad26b406945937f4b2c0e.tar.bz2
plan9port-2d2e5c71f73a8ac0656ad26b406945937f4b2c0e.zip
nonblock
Diffstat (limited to 'src/libmux/io.c')
-rw-r--r--src/libmux/io.c17
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;