svn commit: r275793 - stable/10/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Mon Dec 15 10:29:03 UTC 2014
Author: kib
Date: Mon Dec 15 10:29:02 2014
New Revision: 275793
URL: https://svnweb.freebsd.org/changeset/base/275793
Log:
MFC r275615:
When process is exiting, check for suspension regardless of
multithreaded status of the process.
Modified:
stable/10/sys/kern/kern_exit.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/kern/kern_exit.c
==============================================================================
--- stable/10/sys/kern/kern_exit.c Mon Dec 15 09:40:25 2014 (r275792)
+++ stable/10/sys/kern/kern_exit.c Mon Dec 15 10:29:02 2014 (r275793)
@@ -183,14 +183,15 @@ exit1(struct thread *td, int rv)
* MUST abort all other threads before proceeding past here.
*/
PROC_LOCK(p);
+ /*
+ * First check if some other thread or external request got
+ * here before us. If so, act appropriately: exit or suspend.
+ * We must ensure that stop requests are handled before we set
+ * P_WEXIT.
+ */
+ thread_suspend_check(0);
while (p->p_flag & P_HADTHREADS) {
/*
- * First check if some other thread got here before us.
- * If so, act appropriately: exit or suspend.
- */
- thread_suspend_check(0);
-
- /*
* Kill off the other threads. This requires
* some co-operation from other parts of the kernel
* so it may not be instantaneous. With this state set
@@ -208,12 +209,18 @@ exit1(struct thread *td, int rv)
* either be suspended there or exit.
*/
if (!thread_single(SINGLE_EXIT))
+ /*
+ * All other activity in this process is now
+ * stopped. Threading support has been turned
+ * off.
+ */
break;
-
/*
- * All other activity in this process is now stopped.
- * Threading support has been turned off.
+ * Recheck for new stop or suspend requests which
+ * might appear while process lock was dropped in
+ * thread_single().
*/
+ thread_suspend_check(0);
}
KASSERT(p->p_numthreads == 1,
("exit1: proc %p exiting with %d threads", p, p->p_numthreads));
More information about the svn-src-all
mailing list