1*3ff48bf5SDavid du Colombier #include <u.h> 2*3ff48bf5SDavid du Colombier #include <libc.h> 3*3ff48bf5SDavid du Colombier #include <thread.h> 4*3ff48bf5SDavid du Colombier #include "threadimpl.h" 5*3ff48bf5SDavid du Colombier 6*3ff48bf5SDavid du Colombier long 7*3ff48bf5SDavid du Colombier iocall(Ioproc *io, long (*op)(va_list*), ...) 8*3ff48bf5SDavid du Colombier { 9*3ff48bf5SDavid du Colombier int ret; 10*3ff48bf5SDavid du Colombier 11*3ff48bf5SDavid du Colombier assert(!io->inuse); 12*3ff48bf5SDavid du Colombier io->inuse = 1; 13*3ff48bf5SDavid du Colombier io->op = op; 14*3ff48bf5SDavid du Colombier va_start(io->arg, op); 15*3ff48bf5SDavid du Colombier sendp(io->c, io); 16*3ff48bf5SDavid du Colombier recvp(io->c); 17*3ff48bf5SDavid du Colombier va_end(io->arg); 18*3ff48bf5SDavid du Colombier ret = io->ret; 19*3ff48bf5SDavid du Colombier if(ret < 0) 20*3ff48bf5SDavid du Colombier errstr(io->err, sizeof io->err); 21*3ff48bf5SDavid du Colombier io->inuse = 0; 22*3ff48bf5SDavid du Colombier return ret; 23*3ff48bf5SDavid du Colombier } 24