diff options
author | rsc <devnull@localhost> | 2004-12-25 21:56:33 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-12-25 21:56:33 +0000 |
commit | 1544f90960275dc9211bde30329c3258e0e1bf38 (patch) | |
tree | f55e7a73c03aaa24daa7cc2ad02822b921c477f9 /src/libthread/ioproc.c | |
parent | 7788fd54094693384ef5c92c475656dba8819feb (diff) | |
download | plan9port-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.c | 77 |
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); -} |