rfork.c 493 B

12345678910111213141516171819202122232425262728293031323334
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <fcall.h>
  4. #include <thread.h>
  5. #include <9p.h>
  6. static void
  7. rforker(void (*fn)(void*), void *arg, int flag)
  8. {
  9. switch(rfork(RFPROC|RFMEM|RFNOWAIT|flag)){
  10. case -1:
  11. sysfatal("rfork: %r");
  12. default:
  13. return;
  14. case 0:
  15. fn(arg);
  16. _exits(0);
  17. }
  18. }
  19. void
  20. listensrv(Srv *s, char *addr)
  21. {
  22. _forker = rforker;
  23. _listensrv(s, addr);
  24. }
  25. void
  26. postmountsrv(Srv *s, char *name, char *mtpt, int flag)
  27. {
  28. _forker = rforker;
  29. _postmountsrv(s, name, mtpt, flag);
  30. }