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/iocall.c | |
| parent | 7788fd54094693384ef5c92c475656dba8819feb (diff) | |
| download | plan9port-1544f90960275dc9211bde30329c3258e0e1bf38.tar.gz plan9port-1544f90960275dc9211bde30329c3258e0e1bf38.zip | |
New thread library
Diffstat (limited to 'src/libthread/iocall.c')
| -rw-r--r-- | src/libthread/iocall.c | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/src/libthread/iocall.c b/src/libthread/iocall.c deleted file mode 100644 index e359c4d5..00000000 --- a/src/libthread/iocall.c +++ /dev/null @@ -1,55 +0,0 @@ -#include <u.h> -#include <libc.h> -#include <thread.h> -#include "ioproc.h" - -long -iocall(Ioproc *io, long (*op)(va_list*), ...) -{ - char e[ERRMAX]; - int ret, inted; - Ioproc *msg; - - if(send(io->c, &io) == -1){ - werrstr("interrupted"); - return -1; - } - assert(!io->inuse); - io->inuse = 1; - io->op = op; - va_start(io->arg, op); - msg = io; - inted = 0; - while(send(io->creply, &msg) == -1){ - msg = nil; - inted = 1; - } - if(inted){ - werrstr("interrupted"); - return -1; - } - - /* - * If we get interrupted, we have stick around so that - * the IO proc has someone to talk to. Send it an interrupt - * and try again. - */ - inted = 0; - while(recv(io->creply, nil) == -1){ - inted = 1; - iointerrupt(io); - } - USED(inted); - va_end(io->arg); - ret = io->ret; - if(ret < 0) - strecpy(e, e+sizeof e, io->err); - io->inuse = 0; - - /* release resources */ - while(send(io->creply, &io) == -1) - ; - if(ret < 0) - errstr(e, sizeof e); - return ret; -} |
