aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/ioproc.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-12-25 21:56:33 +0000
committerrsc <devnull@localhost>2004-12-25 21:56:33 +0000
commit1544f90960275dc9211bde30329c3258e0e1bf38 (patch)
treef55e7a73c03aaa24daa7cc2ad02822b921c477f9 /src/libthread/ioproc.c
parent7788fd54094693384ef5c92c475656dba8819feb (diff)
downloadplan9port-1544f90960275dc9211bde30329c3258e0e1bf38.tar.gz
plan9port-1544f90960275dc9211bde30329c3258e0e1bf38.tar.bz2
plan9port-1544f90960275dc9211bde30329c3258e0e1bf38.zip
New thread library
Diffstat (limited to 'src/libthread/ioproc.c')
-rw-r--r--src/libthread/ioproc.c77
1 files changed, 0 insertions, 77 deletions
diff --git a/src/libthread/ioproc.c b/src/libthread/ioproc.c
deleted file mode 100644
index 4e4c32a8..00000000
--- a/src/libthread/ioproc.c
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <u.h>
-#include <libc.h>
-#include <thread.h>
-#include "ioproc.h"
-
-enum
-{
- STACK = 8192,
-};
-
-void
-iointerrupt(Ioproc *io)
-{
- if(!io->inuse)
- return;
- threadint(io->tid);
-}
-
-static void
-xioproc(void *a)
-{
- Ioproc *io, *x;
- io = a;
- /*
- * first recvp acquires the ioproc.
- * second tells us that the data is ready.
- */
- for(;;){
- while(recv(io->c, &x) == -1)
- ;
- if(x == 0) /* our cue to leave */
- break;
- assert(x == io);
-
- /* caller is now committed -- even if interrupted he'll return */
- while(recv(io->creply, &x) == -1)
- ;
- if(x == 0) /* caller backed out */
- continue;
- assert(x == io);
-
- io->ret = io->op(&io->arg);
- if(io->ret < 0)
- rerrstr(io->err, sizeof io->err);
- while(send(io->creply, &io) == -1)
- ;
- while(recv(io->creply, &x) == -1)
- ;
- }
-}
-
-Ioproc*
-ioproc(void)
-{
- Ioproc *io;
-
- io = mallocz(sizeof(*io), 1);
- if(io == nil)
- sysfatal("ioproc malloc: %r");
- io->c = chancreate(sizeof(void*), 0);
- io->creply = chancreate(sizeof(void*), 0);
- io->tid = proccreate(xioproc, io, STACK);
- return io;
-}
-
-void
-closeioproc(Ioproc *io)
-{
- if(io == nil)
- return;
- iointerrupt(io);
- while(send(io->c, 0) == -1)
- ;
- chanfree(io->c);
- chanfree(io->creply);
- free(io);
-}