Blob


1 #include <lib9.h>
3 extern int __isthreaded;
4 int
5 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 void
29 _spinlock(spinlock_t *lk)
30 {
31 lock((Lock*)&lk->access_lock);
32 }
34 int
35 getfforkid(void)
36 {
37 return getpid();
38 }