Blame


1 941e1713 2006-02-15 devnull #include "a.h"
2 941e1713 2006-02-15 devnull
3 941e1713 2006-02-15 devnull typedef struct New New;
4 941e1713 2006-02-15 devnull struct New
5 941e1713 2006-02-15 devnull {
6 941e1713 2006-02-15 devnull void (*fn)(void*);
7 941e1713 2006-02-15 devnull void *arg;
8 941e1713 2006-02-15 devnull };
9 941e1713 2006-02-15 devnull
10 941e1713 2006-02-15 devnull Channel *mailthreadchan;
11 941e1713 2006-02-15 devnull
12 941e1713 2006-02-15 devnull void
13 941e1713 2006-02-15 devnull mailthread(void (*fn)(void*), void *arg)
14 941e1713 2006-02-15 devnull {
15 941e1713 2006-02-15 devnull New n;
16 fa325e9b 2020-01-10 cross
17 941e1713 2006-02-15 devnull n.fn = fn;
18 941e1713 2006-02-15 devnull n.arg = arg;
19 941e1713 2006-02-15 devnull send(mailthreadchan, &n);
20 941e1713 2006-02-15 devnull }
21 941e1713 2006-02-15 devnull
22 941e1713 2006-02-15 devnull void
23 941e1713 2006-02-15 devnull mailproc(void *v)
24 941e1713 2006-02-15 devnull {
25 941e1713 2006-02-15 devnull New n;
26 fa325e9b 2020-01-10 cross
27 2fc68b6d 2011-11-22 rsc USED(v);
28 941e1713 2006-02-15 devnull while(recv(mailthreadchan, &n) == 1)
29 941e1713 2006-02-15 devnull threadcreate(n.fn, n.arg, STACK);
30 941e1713 2006-02-15 devnull }
31 941e1713 2006-02-15 devnull
32 941e1713 2006-02-15 devnull void
33 941e1713 2006-02-15 devnull mailthreadinit(void)
34 941e1713 2006-02-15 devnull {
35 941e1713 2006-02-15 devnull mailthreadchan = chancreate(sizeof(New), 0);
36 941e1713 2006-02-15 devnull proccreate(mailproc, nil, STACK);
37 941e1713 2006-02-15 devnull }