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