From 73722a8bbf80f47ea2df2a212516d1b857ffe29a Mon Sep 17 00:00:00 2001 From: rsc Date: Mon, 27 Dec 2004 03:49:03 +0000 Subject: confine pthreads to pthread.c --- src/libthread/pthread.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) (limited to 'src/libthread/pthread.c') diff --git a/src/libthread/pthread.c b/src/libthread/pthread.c index 8ca8f8f1..6540605d 100644 --- a/src/libthread/pthread.c +++ b/src/libthread/pthread.c @@ -71,16 +71,40 @@ _procwakeup(_Procrendez *r) } } +static void +startprocfn(void *v) +{ + void **a; + void (*fn)(void*); + Proc *p; + + a = (void**)v; + fn = a[0]; + p = a[1]; + free(a); + p->tid = pthread_self(); + pthread_detach(p->tid); + + (*fn)(p); + + pthread_exit(0); +} + void -_procstart(Proc *p, void (*fn)(void*)) +_procstart(Proc *p, void (*fn)(Proc*)) { -//print("pc\n"); - if(pthread_create(&p->tid, nil, (void*(*)(void*))fn, p) < 0){ -//print("pc1\n"); + void **a; + + a = malloc(2*sizeof a[0]); + if(a == nil) + sysfatal("_procstart malloc: %r"); + a[0] = fn; + a[1] = p; + + if(pthread_create(&p->tid, nil, (void*(*)(void*))startprocfn, (void*)a) < 0){ fprint(2, "pthread_create: %r\n"); abort(); } -//print("pc2\n"); } static pthread_key_t prockey; -- cgit v1.2.3