#include <lib9.h>
#include "9proc.h"

extern int __isthreaded;
int
ffork(int flags, void(*fn)(void*), void *arg)
{
	int pid;
	void *p;

	_p9uproc(0);
	__isthreaded = 1;
	p = malloc(16384);
	if(p == nil)
		return -1;
	memset(p, 0xFE, 16384);
	pid = rfork_thread(RFPROC|flags, (char*)p+16000, (int(*)(void*))fn, arg);
	if(pid == 0)
		_p9uproc(0);
	return pid;
}

/*
 * 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);
}

int
getfforkid(void)
{
	return getpid();
}

