Blame


1 d3df3087 2003-12-06 devnull typedef struct Mux Mux;
2 d3df3087 2003-12-06 devnull typedef struct Muxrpc Muxrpc;
3 d3df3087 2003-12-06 devnull typedef struct Muxqueue Muxqueue;
4 d3df3087 2003-12-06 devnull
5 d3df3087 2003-12-06 devnull struct Muxrpc
6 d3df3087 2003-12-06 devnull {
7 d3df3087 2003-12-06 devnull Muxrpc *next;
8 d3df3087 2003-12-06 devnull Muxrpc *prev;
9 d3df3087 2003-12-06 devnull Rendez r;
10 d3df3087 2003-12-06 devnull uint tag;
11 d3df3087 2003-12-06 devnull void *p;
12 d3df3087 2003-12-06 devnull };
13 d3df3087 2003-12-06 devnull
14 d3df3087 2003-12-06 devnull struct Mux
15 d3df3087 2003-12-06 devnull {
16 d3df3087 2003-12-06 devnull uint mintag; /* to be filled by client */
17 d3df3087 2003-12-06 devnull uint maxtag;
18 d3df3087 2003-12-06 devnull int (*send)(Mux*, void*);
19 d3df3087 2003-12-06 devnull void *(*recv)(Mux*);
20 d3df3087 2003-12-06 devnull int (*gettag)(Mux*, void*);
21 d3df3087 2003-12-06 devnull int (*settag)(Mux*, void*, uint);
22 d3df3087 2003-12-06 devnull void *aux; /* for private use by client */
23 d3df3087 2003-12-06 devnull
24 d3df3087 2003-12-06 devnull /* private */
25 b214663d 2004-01-09 devnull QLock lk; /* must be first for muxinit */
26 d3df3087 2003-12-06 devnull QLock inlk;
27 d3df3087 2003-12-06 devnull QLock outlk;
28 d3df3087 2003-12-06 devnull Rendez tagrend;
29 d3df3087 2003-12-06 devnull Rendez rpcfork;
30 d3df3087 2003-12-06 devnull Muxqueue *readq;
31 d3df3087 2003-12-06 devnull Muxqueue *writeq;
32 d3df3087 2003-12-06 devnull uint nwait;
33 d3df3087 2003-12-06 devnull uint mwait;
34 d3df3087 2003-12-06 devnull uint freetag;
35 d3df3087 2003-12-06 devnull Muxrpc **wait;
36 d3df3087 2003-12-06 devnull uint muxer;
37 d3df3087 2003-12-06 devnull Muxrpc sleep;
38 d3df3087 2003-12-06 devnull };
39 d3df3087 2003-12-06 devnull
40 d3df3087 2003-12-06 devnull void muxinit(Mux*);
41 d3df3087 2003-12-06 devnull void* muxrpc(Mux*, void*);
42 d3df3087 2003-12-06 devnull void muxthreads(Mux*);
43 d3df3087 2003-12-06 devnull
44 d3df3087 2003-12-06 devnull /* private */
45 d3df3087 2003-12-06 devnull int _muxsend(Mux*, void*);
46 d3df3087 2003-12-06 devnull void* _muxrecv(Mux*);
47 d3df3087 2003-12-06 devnull void _muxsendproc(void*);
48 d3df3087 2003-12-06 devnull void _muxrecvproc(void*);
49 d3df3087 2003-12-06 devnull Muxqueue *_muxqalloc(void);
50 d3df3087 2003-12-06 devnull int _muxqsend(Muxqueue*, void*);
51 d3df3087 2003-12-06 devnull void *_muxqrecv(Muxqueue*);
52 d3df3087 2003-12-06 devnull void _muxqhangup(Muxqueue*);
53 d3df3087 2003-12-06 devnull void *_muxnbqrecv(Muxqueue*);
54 d3df3087 2003-12-06 devnull