iocall.c 364 B

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