pfind, pfind_any: Correct zombie logic
SVN r340744 erroneously changed pfind() to return any process including zombies and pfind_any() to return only non-zombie processes. In particular, this caused kill() on a zombie process to fail with [ESRCH]. There is no direct test case for this but /usr/tests/bin/sh/builtins/kill1.0 occasionally triggers it (as reported by lwhsu). Conversely, returning zombies from pfind() seems likely to violate invariants and cause panics, but I have not looked at this. PR: 233646 Reviewed by: mjg, kib, ngie Differential Revision: https://reviews.freebsd.org/D18665
This commit is contained in:
parent
a85bc55a7f
commit
9cebe88602
@ -388,7 +388,7 @@ _pfind(pid_t pid, bool zombie)
|
||||
if (p->p_pid == pid) {
|
||||
PROC_LOCK(p);
|
||||
if (p->p_state == PRS_NEW ||
|
||||
(zombie && p->p_state == PRS_ZOMBIE)) {
|
||||
(!zombie && p->p_state == PRS_ZOMBIE)) {
|
||||
PROC_UNLOCK(p);
|
||||
p = NULL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user