aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/upas/nfs/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/upas/nfs/thread.c')
-rw-r--r--src/cmd/upas/nfs/thread.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/cmd/upas/nfs/thread.c b/src/cmd/upas/nfs/thread.c
new file mode 100644
index 00000000..710a33d7
--- /dev/null
+++ b/src/cmd/upas/nfs/thread.c
@@ -0,0 +1,37 @@
+#include "a.h"
+
+typedef struct New New;
+struct New
+{
+ void (*fn)(void*);
+ void *arg;
+};
+
+Channel *mailthreadchan;
+
+void
+mailthread(void (*fn)(void*), void *arg)
+{
+ New n;
+
+ n.fn = fn;
+ n.arg = arg;
+ send(mailthreadchan, &n);
+}
+
+void
+mailproc(void *v)
+{
+ New n;
+
+ while(recv(mailthreadchan, &n) == 1)
+ threadcreate(n.fn, n.arg, STACK);
+}
+
+void
+mailthreadinit(void)
+{
+ mailthreadchan = chancreate(sizeof(New), 0);
+ proccreate(mailproc, nil, STACK);
+}
+