fix bug in previous - if child was traced and p_opptr == p_pptr,
need to reparent the process to initproc, so that child wouldn't have its p_pptr pointer still pointing on the exited parent pointed out by Dave Sainty in private mail (the patch in kern/14443 didn't have this bug)
This commit is contained in:
parent
c12288aed8
commit
e0d29a5578
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: kern_exit.c,v 1.104 2002/11/28 21:41:29 jdolecek Exp $ */
|
/* $NetBSD: kern_exit.c,v 1.105 2002/11/30 09:54:43 jdolecek Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
|
* Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: kern_exit.c,v 1.104 2002/11/28 21:41:29 jdolecek Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: kern_exit.c,v 1.105 2002/11/30 09:54:43 jdolecek Exp $");
|
||||||
|
|
||||||
#include "opt_ktrace.h"
|
#include "opt_ktrace.h"
|
||||||
#include "opt_perfctrs.h"
|
#include "opt_perfctrs.h"
|
||||||
|
@ -273,7 +273,8 @@ exit1(struct proc *p, int rv)
|
||||||
struct proc *t = q->p_opptr;
|
struct proc *t = q->p_opptr;
|
||||||
proc_reparent(q, t ? t : initproc);
|
proc_reparent(q, t ? t : initproc);
|
||||||
q->p_opptr = NULL;
|
q->p_opptr = NULL;
|
||||||
}
|
} else
|
||||||
|
proc_reparent(q, initproc);
|
||||||
q->p_flag &= ~(P_TRACED|P_WAITED|P_FSTRACE);
|
q->p_flag &= ~(P_TRACED|P_WAITED|P_FSTRACE);
|
||||||
psignal(q, SIGKILL);
|
psignal(q, SIGKILL);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue