Blob
1 #include <lib9.h>2 #include "9proc.h"4 extern int __isthreaded;5 int6 ffork(int flags, void(*fn)(void*), void *arg)7 {8 int pid;9 void *p;11 _p9uproc(0);12 __isthreaded = 1;13 p = malloc(16384);14 if(p == nil)15 return -1;16 memset(p, 0xFE, 16384);17 pid = rfork_thread(RFPROC|flags, (char*)p+16000, (int(*)(void*))fn, arg);18 if(pid == 0)19 _p9uproc(0);20 return pid;21 }23 /*24 * For FreeBSD libc.25 */27 typedef struct {28 volatile long access_lock;29 volatile long lock_owner;30 volatile char *fname;31 volatile int lineno;32 } spinlock_t;34 void35 _spinlock(spinlock_t *lk)36 {37 lock((Lock*)&lk->access_lock);38 }40 int41 getfforkid(void)42 {43 return getpid();44 }