aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/pid.c
blob: bbc7dbbfb4d26443b024cd820345ee8445068b8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
	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);
		}
	}