commit c02bc16b4b963327a66f7455c23665f55d63b398 from: rsc date: Sun Jun 25 23:50:02 2006 UTC nbrecv commit - eacc13ea5cb1f59e3d1365c1149a77c5ef804e7d commit + c02bc16b4b963327a66f7455c23665f55d63b398 blob - 01d1779c0eb4692c4484f137a72f48cfed42b259 blob + 53321fa5258886698e48b24b585ab427bfaf3f4b --- include/mux.h +++ include/mux.h @@ -12,11 +12,13 @@ typedef struct Muxqueue Muxqueue; struct Muxrpc { + Mux *mux; Muxrpc *next; Muxrpc *prev; Rendez r; uint tag; void *p; + int waiting; }; struct Mux @@ -25,6 +27,7 @@ struct Mux uint maxtag; int (*send)(Mux*, void*); void *(*recv)(Mux*); + void *(*nbrecv)(Mux*); int (*gettag)(Mux*, void*); int (*settag)(Mux*, void*, uint); void *aux; /* for private use by client */ @@ -41,17 +44,19 @@ struct Mux uint mwait; uint freetag; Muxrpc **wait; - uint muxer; + Muxrpc *muxer; Muxrpc sleep; }; void muxinit(Mux*); void* muxrpc(Mux*, void*); -void muxthreads(Mux*); +void muxprocs(Mux*); +Muxrpc* muxrpcstart(Mux*, void*); +void* muxrpccanfinish(Muxrpc*); /* private */ int _muxsend(Mux*, void*); -void* _muxrecv(Mux*); +void* _muxrecv(Mux*, int); void _muxsendproc(void*); void _muxrecvproc(void*); Muxqueue *_muxqalloc(void);