blob: 3829bb2da26a35fab2f9df843484b465f677f298 [file] [log] [blame]
rscb2cfc4e2003-09-30 17:47:41 +00001#include <lib9.h>
2
3extern int __isthreaded;
4int
5ffork(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
21typedef struct {
22 volatile long access_lock;
23 volatile long lock_owner;
24 volatile char *fname;
25 volatile int lineno;
26} spinlock_t;
27
28void
29_spinlock(spinlock_t *lk)
30{
31 lock((Lock*)&lk->access_lock);
32}
33
rsca995e472003-10-01 02:50:57 +000034int
35getfforkid(void)
36{
37 return getpid();
38}
39