From 1544f90960275dc9211bde30329c3258e0e1bf38 Mon Sep 17 00:00:00 2001 From: rsc Date: Sat, 25 Dec 2004 21:56:33 +0000 Subject: New thread library --- src/libthread/ioproc.c | 77 -------------------------------------------------- 1 file changed, 77 deletions(-) delete mode 100644 src/libthread/ioproc.c (limited to 'src/libthread/ioproc.c') 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 -#include -#include -#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); -} -- cgit v1.2.3