aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libthread/exit.c')
-rw-r--r--src/libthread/exit.c31
1 files changed, 1 insertions, 30 deletions
diff --git a/src/libthread/exit.c b/src/libthread/exit.c
index f3d4bb8e..79aa7c7f 100644
--- a/src/libthread/exit.c
+++ b/src/libthread/exit.c
@@ -26,42 +26,13 @@ threadexits(char *exitstr)
void
threadexitsall(char *exitstr)
{
- Proc *p;
- int *pid;
- int i, npid, mypid;
-
_threaddebug(DBGSCHED, "threadexitsall %s", exitstr);
if(exitstr == nil)
exitstr = "";
_threadexitsallstatus = exitstr;
_threaddebug(DBGSCHED, "_threadexitsallstatus set to %p", _threadexitsallstatus);
- mypid = _threadgetpid();
-
- /*
- * signal others.
- * copying all the pids first avoids other thread's
- * teardown procedures getting in the way.
- */
- lock(&_threadpq.lock);
- npid = 0;
- for(p=_threadpq.head; p; p=p->next)
- npid++;
- pid = _threadmalloc(npid*sizeof(pid[0]), 0);
- npid = 0;
- for(p = _threadpq.head; p; p=p->next)
- pid[npid++] = p->pid;
- unlock(&_threadpq.lock);
- for(i=0; i<npid; i++){
- _threaddebug(DBGSCHED, "threadexitsall kill %d", pid[i]);
- if(pid[i]==0 || pid[i]==-1)
- fprint(2, "bad pid in threadexitsall: %d\n", pid[i]);
- else if(pid[i] != mypid){
- kill(pid[i], SIGTERM);
- }
- }
-
/* leave */
- exits(0);
+ _threadexitallproc(exitstr);
}
Channel*