aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/thread.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-18 20:53:12 +0000
committerrsc <devnull@localhost>2005-01-18 20:53:12 +0000
commit803292c631c8e80a0596a011a901e72c8e0e0edc (patch)
tree4784f0206d5d25457cee87227eebe148080ac360 /src/libthread/thread.c
parent1c8159def559fc9bcf5070d90901c84f996ab59a (diff)
downloadplan9port-803292c631c8e80a0596a011a901e72c8e0e0edc.tar.gz
plan9port-803292c631c8e80a0596a011a901e72c8e0e0edc.tar.bz2
plan9port-803292c631c8e80a0596a011a901e72c8e0e0edc.zip
proccreate race
Diffstat (limited to 'src/libthread/thread.c')
-rw-r--r--src/libthread/thread.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/libthread/thread.c b/src/libthread/thread.c
index b154ce6e..ff22bbaa 100644
--- a/src/libthread/thread.c
+++ b/src/libthread/thread.c
@@ -171,13 +171,15 @@ threadcreate(void (*fn)(void*), void *arg, uint stack)
int
proccreate(void (*fn)(void*), void *arg, uint stack)
{
+ int id;
_Thread *t;
Proc *p;
p = procalloc();
t = _threadcreate(p, fn, arg, stack);
+ id = t->id; /* t might be freed after _procstart */
_procstart(p, scheduler);
- return t->id;
+ return id;
}
void