mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
34 lines
506 B
C
34 lines
506 B
C
|
#include <lib9.h>
|
||
|
|
||
|
extern int __isthreaded;
|
||
|
int
|
||
|
ffork(int flags, void(*fn)(void*), void *arg)
|
||
|
{
|
||
|
void *p;
|
||
|
|
||
|
__isthreaded = 1;
|
||
|
p = malloc(16384);
|
||
|
if(p == nil)
|
||
|
return -1;
|
||
|
memset(p, 0xFE, 16384);
|
||
|
return rfork_thread(RFPROC|flags, (char*)p+16000, (int(*)(void*))fn, arg);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* For FreeBSD libc.
|
||
|
*/
|
||
|
|
||
|
typedef struct {
|
||
|
volatile long access_lock;
|
||
|
volatile long lock_owner;
|
||
|
volatile char *fname;
|
||
|
volatile int lineno;
|
||
|
} spinlock_t;
|
||
|
|
||
|
void
|
||
|
_spinlock(spinlock_t *lk)
|
||
|
{
|
||
|
lock((Lock*)&lk->access_lock);
|
||
|
}
|
||
|
|