rsc | b2cfc4e | 2003-09-30 17:47:41 +0000 | [diff] [blame] | 1 | #include <lib9.h> |
| 2 | |
| 3 | extern int __isthreaded; |
| 4 | int |
| 5 | ffork(int flags, void(*fn)(void*), void *arg) |
| 6 | { |
| 7 | void *p; |
| 8 | |
| 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 | } |
| 16 | |
| 17 | /* |
| 18 | * For FreeBSD libc. |
| 19 | */ |
| 20 | |
| 21 | typedef struct { |
| 22 | volatile long access_lock; |
| 23 | volatile long lock_owner; |
| 24 | volatile char *fname; |
| 25 | volatile int lineno; |
| 26 | } spinlock_t; |
| 27 | |
| 28 | void |
| 29 | _spinlock(spinlock_t *lk) |
| 30 | { |
| 31 | lock((Lock*)&lk->access_lock); |
| 32 | } |
| 33 | |
rsc | a995e47 | 2003-10-01 02:50:57 +0000 | [diff] [blame] | 34 | int |
| 35 | getfforkid(void) |
| 36 | { |
| 37 | return getpid(); |
| 38 | } |
| 39 | |