Blob
1 #include <lib9.h>3 extern int __isthreaded;4 int5 ffork(int flags, void(*fn)(void*), void *arg)6 {7 void *p;9 __isthreaded = 1;10 p = malloc(16384);11 if(p == nil)12 return -1;13 memset(p, 0xFE, 16384);14 return rfork_thread(RFPROC|flags, (char*)p+16000, (int(*)(void*))fn, arg);15 }17 /*18 * For FreeBSD libc.19 */21 typedef struct {22 volatile long access_lock;23 volatile long lock_owner;24 volatile char *fname;25 volatile int lineno;26 } spinlock_t;28 void29 _spinlock(spinlock_t *lk)30 {31 lock((Lock*)&lk->access_lock);32 }34 int35 getfforkid(void)36 {37 return getpid();38 }