1 b2cfc4e2 2003-09-30 devnull #include <lib9.h>
2 631fe87f 2004-05-14 devnull #include "9proc.h"
4 b2cfc4e2 2003-09-30 devnull extern int __isthreaded;
6 b2cfc4e2 2003-09-30 devnull ffork(int flags, void(*fn)(void*), void *arg)
11 b1455f33 2004-04-30 devnull _p9uproc(0);
12 b2cfc4e2 2003-09-30 devnull __isthreaded = 1;
13 b2cfc4e2 2003-09-30 devnull p = malloc(16384);
14 b2cfc4e2 2003-09-30 devnull if(p == nil)
15 b2cfc4e2 2003-09-30 devnull return -1;
16 b2cfc4e2 2003-09-30 devnull memset(p, 0xFE, 16384);
17 b1455f33 2004-04-30 devnull pid = rfork_thread(RFPROC|flags, (char*)p+16000, (int(*)(void*))fn, arg);
18 b1455f33 2004-04-30 devnull if(pid == 0)
19 b1455f33 2004-04-30 devnull _p9uproc(0);
20 b1455f33 2004-04-30 devnull return pid;
24 b2cfc4e2 2003-09-30 devnull * For FreeBSD libc.
27 b2cfc4e2 2003-09-30 devnull typedef struct {
28 b2cfc4e2 2003-09-30 devnull volatile long access_lock;
29 b2cfc4e2 2003-09-30 devnull volatile long lock_owner;
30 b2cfc4e2 2003-09-30 devnull volatile char *fname;
31 b2cfc4e2 2003-09-30 devnull volatile int lineno;
32 b2cfc4e2 2003-09-30 devnull } spinlock_t;
35 b2cfc4e2 2003-09-30 devnull _spinlock(spinlock_t *lk)
37 b2cfc4e2 2003-09-30 devnull lock((Lock*)&lk->access_lock);
41 a995e477 2003-10-01 devnull getfforkid(void)
43 a995e477 2003-10-01 devnull return getpid();