summaryrefslogtreecommitdiffstats
path: root/src/libthread/BSD.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libthread/BSD.c')
-rw-r--r--src/libthread/BSD.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libthread/BSD.c b/src/libthread/BSD.c
index 8090ea59..3dbb3b2a 100644
--- a/src/libthread/BSD.c
+++ b/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)