#include <pthread.h>

#define NODEFINE
#include <u.h>
#include <libc.h>


static void*
newpthread(void *v)
{
	Pmproc *p;
	struct { void (*fn)(void*); void *arg; } *a;
	void (*fn)(void*);
	void *arg;

	p = pm_mallocz(sizeof(*p), 1);
	pm_setup(p);
	
	a = v;
	fn = a->fn;
	arg = a->arg;
	pm_free(a);
	(*fn)(arg);
	pthread_exit(nil);
	return nil;
}

void
pm_proc(void (*fn)(void*), void *arg, uint stacksize)
{
	struct { void (*fn)(void*); void *arg; } *a;
	pthread_t id;

	USED(stacksize);
	a = pm_malloc(sizeof(*a));
	a->fn = fn;
	a->arg = arg;
	if(pthread_create(&id, nil, newpthread, a) != 0)
		pm_panic("pmproc");
}



syntax highlighted by Code2HTML, v. 0.9.1