summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreadler <eadler@FreeBSD.org>2012-10-22 03:36:44 +0000
committereadler <eadler@FreeBSD.org>2012-10-22 03:36:44 +0000
commitf38062a582d2eabb7770115f0c26ca665e612f56 (patch)
tree3aa86a2f61ac3b57647e44878110dc60da9069e7
parentf48bd672c6ce3205caee89a211bbf9e4dc081384 (diff)
downloadFreeBSD-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.c21
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_
OpenPOWER on IntegriCloud