summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2014-01-20 21:19:27 +0000
committerguenther <guenther@openbsd.org>2014-01-20 21:19:27 +0000
commit712e2ef1d075cfb59b85031fe4aaec60cc1e47a0 (patch)
tree632f21bb409d9c4fb9be6a0c8ee0bb473f9ec7c7 /sys/kern/kern_sig.c
parentfor the SHA256 file, output checksums in base64; ok espie@ (diff)
downloadwireguard-openbsd-712e2ef1d075cfb59b85031fe4aaec60cc1e47a0.tar.xz
wireguard-openbsd-712e2ef1d075cfb59b85031fe4aaec60cc1e47a0.zip
Threads can't be zombies, only processes, so change zombproc to zombprocess,
make it a list of processes, and change P_NOZOMBIE and P_STOPPED from thread flags to process flags. Add allprocess list for the code that just wants to see processes. ok tedu@
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index dd8fbfcc83e..a1b210e3f3e 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_sig.c,v 1.155 2013/10/08 03:50:07 guenther Exp $ */
+/* $OpenBSD: kern_sig.c,v 1.156 2014/01/20 21:19:28 guenther Exp $ */
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
/*
@@ -616,8 +616,9 @@ killpg1(struct proc *cp, int signum, int pgid, int all)
/*
* broadcast
*/
- LIST_FOREACH(p, &allproc, p_list) {
- if (p->p_pid <= 1 || p->p_flag & (P_SYSTEM|P_THREAD) ||
+ LIST_FOREACH(pr, &allprocess, ps_list) {
+ p = pr->ps_mainproc;
+ if (p->p_pid <= 1 || p->p_flag & P_SYSTEM ||
p == cp || !cansignal(cp, pc, p, signum))
continue;
nfound++;
@@ -1222,6 +1223,7 @@ keep:
void
proc_stop(struct proc *p, int sw)
{
+ struct process *pr = p->p_p;
extern void *softclock_si;
#ifdef MULTIPROCESSOR
@@ -1229,8 +1231,9 @@ proc_stop(struct proc *p, int sw)
#endif
p->p_stat = SSTOP;
- atomic_clearbits_int(&p->p_p->ps_flags, PS_WAITED);
- atomic_setbits_int(&p->p_flag, P_STOPPED|P_SUSPSIG);
+ atomic_clearbits_int(&pr->ps_flags, PS_WAITED);
+ atomic_setbits_int(&pr->ps_flags, PS_STOPPED);
+ atomic_setbits_int(&p->p_flag, P_SUSPSIG);
if (!timeout_pending(&proc_stop_to)) {
timeout_add(&proc_stop_to, 0);
/*
@@ -1251,17 +1254,17 @@ proc_stop(struct proc *p, int sw)
void
proc_stop_sweep(void *v)
{
- struct proc *p;
+ struct process *pr;
- LIST_FOREACH(p, &allproc, p_list) {
- if ((p->p_flag & P_STOPPED) == 0)
+ LIST_FOREACH(pr, &allprocess, ps_list) {
+ if ((pr->ps_flags & PS_STOPPED) == 0)
continue;
- atomic_clearbits_int(&p->p_flag, P_STOPPED);
+ atomic_clearbits_int(&pr->ps_flags, PS_STOPPED);
- if ((p->p_p->ps_pptr->ps_mainproc->p_sigacts->ps_flags &
+ if ((pr->ps_pptr->ps_mainproc->p_sigacts->ps_flags &
SAS_NOCLDSTOP) == 0)
- prsignal(p->p_p->ps_pptr, SIGCHLD);
- wakeup(p->p_p->ps_pptr);
+ prsignal(pr->ps_pptr, SIGCHLD);
+ wakeup(pr->ps_pptr);
}
}