mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-17 10:26:15 +00:00
Reparenting done by debugger attach can leave reaper without direct
children. Handle the situation instead asserting that it is impossible. Reported and tested by: emaste Sponsored by: The FreeBSD Foundation MFC after: 3 days
This commit is contained in:
parent
4b685a2862
commit
45f1ade79b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=278795
@ -160,7 +160,7 @@ static int
|
||||
reap_status(struct thread *td, struct proc *p,
|
||||
struct procctl_reaper_status *rs)
|
||||
{
|
||||
struct proc *reap, *p2;
|
||||
struct proc *reap, *p2, *first_p;
|
||||
|
||||
sx_assert(&proctree_lock, SX_LOCKED);
|
||||
bzero(rs, sizeof(*rs));
|
||||
@ -176,8 +176,10 @@ reap_status(struct thread *td, struct proc *p,
|
||||
rs->rs_descendants = 0;
|
||||
rs->rs_children = 0;
|
||||
if (!LIST_EMPTY(&reap->p_reaplist)) {
|
||||
KASSERT(!LIST_EMPTY(&reap->p_children), ("no children"));
|
||||
rs->rs_pid = LIST_FIRST(&reap->p_children)->p_pid;
|
||||
first_p = LIST_FIRST(&reap->p_children);
|
||||
if (first_p == NULL)
|
||||
first_p = LIST_FIRST(&reap->p_reaplist);
|
||||
rs->rs_pid = first_p->p_pid;
|
||||
LIST_FOREACH(p2, &reap->p_reaplist, p_reapsibling) {
|
||||
if (proc_realparent(p2) == reap)
|
||||
rs->rs_children++;
|
||||
|
Loading…
Reference in New Issue
Block a user