4 #include "threadimpl.h"
12 iointerrupt(Ioproc *io)
18 write(io->ctl, "interrupt", 9);
30 if(io = mallocz(sizeof(*io), 1)){
34 * open might fail, ignore it for programs like factotum
35 * that don't use iointerrupt() anyway.
37 snprint(buf, sizeof(buf), "/proc/%d/ctl", getpid());
38 io->ctl = open(buf, OWRITE);
40 if((io->creply = chancreate(sizeof(void*), 0)) == nil){
48 while(send(c, &io) < 0)
54 while(recv(io->c, &r) < 0)
60 strcpy(r->err, "interrupted");
61 } else if((r->ret = r->op(&r->arg)) < 0)
62 rerrstr(r->err, sizeof r->err);
67 write(io->ctl, "nointerrupt", 11);
69 while(send(io->creply, &r) < 0)
87 if((c = chancreate(sizeof(void*), 0)) == nil)
88 sysfatal("ioproc chancreate");
89 proccreate(xioproc, c, STACK);
90 while(recv(c, &io) < 0)
93 sysfatal("ioproc alloc");
98 closeioproc(Ioproc *io)
103 while(sendp(io->c, nil) < 0)