svn commit: r233920 - stable/9/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Thu Apr 5 10:33:39 UTC 2012
Author: kib
Date: Thu Apr 5 10:33:39 2012
New Revision: 233920
URL: http://svn.freebsd.org/changeset/base/233920
Log:
MFC r233809:
When process exists, not only the children shall be reparented to
init, but also the orphans shall be removed from the orphan list,
because the list header is destroyed.
Modified:
stable/9/sys/kern/kern_exit.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/kern/kern_exit.c
==============================================================================
--- stable/9/sys/kern/kern_exit.c Thu Apr 5 10:30:54 2012 (r233919)
+++ stable/9/sys/kern/kern_exit.c Thu Apr 5 10:33:39 2012 (r233920)
@@ -430,6 +430,13 @@ exit1(struct thread *td, int rv)
if (q->p_flag & P_TRACED) {
struct thread *temp;
+ /*
+ * Since q was found on our children list, the
+ * proc_reparent() call moved q to the orphan
+ * list due to present P_TRACED flag. Clear
+ * orphan link for q now while q is locked.
+ */
+ clear_orphan(q);
q->p_flag &= ~(P_TRACED | P_STOPPED_TRACE);
FOREACH_THREAD_IN_PROC(q, temp)
temp->td_dbgflags &= ~TDB_SUSPEND;
@@ -438,6 +445,15 @@ exit1(struct thread *td, int rv)
PROC_UNLOCK(q);
}
+ /*
+ * Also get rid of our orphans.
+ */
+ while ((q = LIST_FIRST(&p->p_orphans)) != NULL) {
+ PROC_LOCK(q);
+ clear_orphan(q);
+ PROC_UNLOCK(q);
+ }
+
/* Save exit status. */
PROC_LOCK(p);
p->p_xthread = td;
More information about the svn-src-stable-9
mailing list