mypid = getpid(); | |
/* | |
* 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); | |
} | |
} | |