commit f19d56825d36b224a376b4012c7656871d9b1535 from: rsc date: Thu Jul 28 12:43:41 2005 UTC different fix commit - d407972b54c11282a62788f5d1812ac6603c4234 commit + f19d56825d36b224a376b4012c7656871d9b1535 blob - 8090ea59c428d62d07e2926bfe101693bf99d40f blob + 3dbb3b2a8bd1c3abfbf9e8c217baf0adc7731834 --- src/libthread/BSD.c +++ src/libthread/BSD.c @@ -285,6 +285,9 @@ threadexitsall(char *msg) int i, npid, mypid; Proc *p; + if(msg == nil) + msg = ""; + /* * Only one guy, ever, gets to run this. * If two guys do it, inevitably they end up @@ -296,7 +299,9 @@ threadexitsall(char *msg) */ { static Lock onelock; - lock(&onelock); + if(!canlock(&onelock)) + _exits(threadexitsmsg); + threadexitsmsg = msg; } if(msg == nil) blob - 146988562391981e2d38f1cf852222eefb45ac16 blob + dab12d3f6e030476fcc58d43010c291a188d432f --- src/libthread/Linux.c +++ src/libthread/Linux.c @@ -311,6 +311,9 @@ threadexitsall(char *msg) int i, npid, mypid; Proc *p; + if(msg == nil) + msg = ""; + /* * Only one guy, ever, gets to run this. * If two guys do it, inevitably they end up @@ -322,14 +325,13 @@ threadexitsall(char *msg) */ { static Lock onelock; - lock(&onelock); + if(!canlock(&onelock)) + _exits(threadexitsmsg); + threadexitsmsg = msg; } - if(msg == nil) - msg = ""; mypid = getpid(); lock(&_threadprocslock); - threadexitsmsg = msg; npid = 0; for(p=_threadprocs; p; p=p->next) if(p->osprocid != mypid && p->osprocid >= 1)