From d3df308747ee4d1fcc063a348dcf1146b390bda7 Mon Sep 17 00:00:00 2001 From: rsc Date: Sat, 6 Dec 2003 18:08:52 +0000 Subject: File system stuff. --- include/mux.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 include/mux.h (limited to 'include/mux.h') diff --git a/include/mux.h b/include/mux.h new file mode 100644 index 00000000..c43ce797 --- /dev/null +++ b/include/mux.h @@ -0,0 +1,54 @@ +typedef struct Mux Mux; +typedef struct Muxrpc Muxrpc; +typedef struct Muxqueue Muxqueue; + +struct Muxrpc +{ + Muxrpc *next; + Muxrpc *prev; + Rendez r; + uint tag; + void *p; +}; + +struct Mux +{ + uint mintag; /* to be filled by client */ + uint maxtag; + int (*send)(Mux*, void*); + void *(*recv)(Mux*); + int (*gettag)(Mux*, void*); + int (*settag)(Mux*, void*, uint); + void *aux; /* for private use by client */ + +/* private */ + QLock lk; + QLock inlk; + QLock outlk; + Rendez tagrend; + Rendez rpcfork; + Muxqueue *readq; + Muxqueue *writeq; + uint nwait; + uint mwait; + uint freetag; + Muxrpc **wait; + uint muxer; + Muxrpc sleep; +}; + +void muxinit(Mux*); +void* muxrpc(Mux*, void*); +void muxthreads(Mux*); + +/* private */ +int _muxsend(Mux*, void*); +void* _muxrecv(Mux*); +void _muxsendproc(void*); +void _muxrecvproc(void*); +Muxqueue *_muxqalloc(void); +int _muxqsend(Muxqueue*, void*); +void *_muxqrecv(Muxqueue*); +void _muxqhangup(Muxqueue*); +void *_muxnbqrecv(Muxqueue*); + -- cgit v1.2.3