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