diff options
author | eadler <eadler@FreeBSD.org> | 2012-10-22 03:36:44 +0000 |
---|---|---|
committer | eadler <eadler@FreeBSD.org> | 2012-10-22 03:36:44 +0000 |
commit | f38062a582d2eabb7770115f0c26ca665e612f56 (patch) | |
tree | 3aa86a2f61ac3b57647e44878110dc60da9069e7 | |
parent | f48bd672c6ce3205caee89a211bbf9e4dc081384 (diff) | |
download | FreeBSD-src-f38062a582d2eabb7770115f0c26ca665e612f56.zip FreeBSD-src-f38062a582d2eabb7770115f0c26ca665e612f56.tar.gz |
Colin acked the wrong diff originally. fixed version coming soon.
Approved by: cperciva (implicit)
-rw-r--r-- | sys/kern/kern_sig.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index ed2e0e9..13848b6 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -1599,10 +1599,8 @@ killpg1(struct thread *td, int sig, int pgid, int all, ksiginfo_t *ksi) { struct proc *p; struct pgrp *pgrp; - int err; - int ret; + int nfound = 0; - ret = ESRCH; if (all) { /* * broadcast @@ -1615,14 +1613,11 @@ killpg1(struct thread *td, int sig, int pgid, int all, ksiginfo_t *ksi) PROC_UNLOCK(p); continue; } - err = p_cansignal(td, p, sig); - if (err == 0) { + if (p_cansignal(td, p, sig) == 0) { + nfound++; if (sig) pksignal(p, sig, ksi); - ret = err; } - else if (ret == ESRCH) - ret = err; PROC_UNLOCK(p); } sx_sunlock(&allproc_lock); @@ -1649,20 +1644,16 @@ killpg1(struct thread *td, int sig, int pgid, int all, ksiginfo_t *ksi) PROC_UNLOCK(p); continue; } - err = p_cansignal(td, p, sig); - if (err == 0) { + if (p_cansignal(td, p, sig) == 0) { + nfound++; if (sig) pksignal(p, sig, ksi); } - if (err == 0) - ret = err; - else if (ret == ESRCH) - ret = err; PROC_UNLOCK(p); } PGRP_UNLOCK(pgrp); } - return (ret); + return (nfound ? 0 : ESRCH); } #ifndef _SYS_SYSPROTO_H_ |