aboutsummaryrefslogtreecommitdiff
path: root/src/libthread
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-07-28 12:43:41 +0000
committerrsc <devnull@localhost>2005-07-28 12:43:41 +0000
commitf19d56825d36b224a376b4012c7656871d9b1535 (patch)
tree8780f134d5679898214cb085cde0a8a4adb6cca6 /src/libthread
parentd407972b54c11282a62788f5d1812ac6603c4234 (diff)
downloadplan9port-f19d56825d36b224a376b4012c7656871d9b1535.tar.gz
plan9port-f19d56825d36b224a376b4012c7656871d9b1535.tar.bz2
plan9port-f19d56825d36b224a376b4012c7656871d9b1535.zip
different fix
Diffstat (limited to 'src/libthread')
-rw-r--r--src/libthread/BSD.c7
-rw-r--r--src/libthread/Linux.c10
2 files changed, 12 insertions, 5 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)
diff --git a/src/libthread/Linux.c b/src/libthread/Linux.c
index 14698856..dab12d3f 100644
--- a/src/libthread/Linux.c
+++ b/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)