diff options
| author | 2014-01-20 21:19:27 +0000 | |
|---|---|---|
| committer | 2014-01-20 21:19:27 +0000 | |
| commit | 712e2ef1d075cfb59b85031fe4aaec60cc1e47a0 (patch) | |
| tree | 632f21bb409d9c4fb9be6a0c8ee0bb473f9ec7c7 /sys/kern/kern_sig.c | |
| parent | for the SHA256 file, output checksums in base64; ok espie@ (diff) | |
| download | wireguard-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.c | 27 |
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); } } |
