Blob


1 #include <lib9.h>
2 #include "9proc.h"
4 extern int __isthreaded;
5 int
6 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 void
35 _spinlock(spinlock_t *lk)
36 {
37 lock((Lock*)&lk->access_lock);
38 }
40 int
41 getfforkid(void)
42 {
43 return getpid();
44 }