Author: kib
Date: Sat May 16 09:13:56 2015
New Revision: 283004
URL: https://svnweb.freebsd.org/changeset/base/283004

Log:
  MFC r282679:
  Do not return from thread_single(SINGLE_BOUNDARY) until all stopped
  thread are guarenteed to be removed from the processors.

Modified:
  stable/10/sys/kern/kern_thread.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/kern_thread.c
==============================================================================
--- stable/10/sys/kern/kern_thread.c    Sat May 16 08:12:00 2015        
(r283003)
+++ stable/10/sys/kern/kern_thread.c    Sat May 16 09:13:56 2015        
(r283004)
@@ -758,6 +758,29 @@ stopme:
                        PROC_LOCK(p);
                        PROC_SLOCK(p);
                }
+       } else if (mode == SINGLE_BOUNDARY) {
+               /*
+                * Wait until all suspended threads are removed from
+                * the processors.  The thread_suspend_check()
+                * increments p_boundary_count while it is still
+                * running, which makes it possible for the execve()
+                * to destroy vmspace while our other threads are
+                * still using the address space.
+                *
+                * We lock the thread, which is only allowed to
+                * succeed after context switch code finished using
+                * the address space.
+                */
+               FOREACH_THREAD_IN_PROC(p, td2) {
+                       if (td2 == td)
+                               continue;
+                       thread_lock(td2);
+                       KASSERT((td2->td_flags & TDF_BOUNDARY) != 0,
+                           ("td %p not on boundary", td2));
+                       KASSERT(TD_IS_SUSPENDED(td2),
+                           ("td %p is not suspended", td2));
+                       thread_unlock(td2);
+               }
        }
        PROC_SUNLOCK(p);
        return (0);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "[email protected]"

Reply via email to