Hoist code on marking thread as exited
authorYao Qi <yao.qi@linaro.org>
Mon, 10 Apr 2017 13:39:41 +0000 (14:39 +0100)
committerYao Qi <yao.qi@linaro.org>
Mon, 10 Apr 2017 13:39:41 +0000 (14:39 +0100)
This patch hoists code on marking thread as exited, so more code is shared
for two different paths (thread_info is deleted or is not deleted).

gdb:

2017-04-10  Yao Qi  <yao.qi@linaro.org>

* thread.c (delete_thread_1): Hoist code on marking thread as
exited.

gdb/ChangeLog
gdb/thread.c

index f08f5201d1c175723fb1b3d1d26ab08d0d3faddb..a1f8b49eab16b52df41e1669f417b5973b7c6608 100644 (file)
@@ -1,3 +1,8 @@
+2017-04-10  Yao Qi  <yao.qi@linaro.org>
+
+       * thread.c (delete_thread_1): Hoist code on marking thread as
+       exited.
+
 2017-04-09  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * windows-nat.c (windows_detach): Initialize ptid with
index 24347dd6e66768d7d66cecfc5b81289163c53af2..2e9da53ef0eceea62ddd54719aa6bc527aa87b67 100644 (file)
@@ -434,35 +434,26 @@ delete_thread_1 (ptid_t ptid, int silent)
   if (tp->step_over_next != NULL)
     thread_step_over_chain_remove (tp);
 
-  /* If this is the current thread, or there's code out there that
-     relies on it existing (refcount > 0) we can't delete yet.  Mark
-     it as exited, and notify it.  */
-  if (tp->refcount > 0
-      || ptid_equal (tp->ptid, inferior_ptid))
+  if (tp->state != THREAD_EXITED)
     {
-      if (tp->state != THREAD_EXITED)
-       {
-         observer_notify_thread_exit (tp, silent);
+      observer_notify_thread_exit (tp, silent);
 
-         /* Tag it as exited.  */
-         tp->state = THREAD_EXITED;
+      /* Tag it as exited.  */
+      tp->state = THREAD_EXITED;
 
-         /* Clear breakpoints, etc. associated with this thread.  */
-         clear_thread_inferior_resources (tp);
-       }
+      /* Clear breakpoints, etc. associated with this thread.  */
+      clear_thread_inferior_resources (tp);
+    }
 
+  /* If this is the current thread, or there's code out there that
+     relies on it existing (refcount > 0) we can't delete yet.  */
+  if (tp->refcount > 0
+      || ptid_equal (tp->ptid, inferior_ptid))
+    {
        /* Will be really deleted some other time.  */
        return;
      }
 
-  /* Notify thread exit, but only if we haven't already.  */
-  if (tp->state != THREAD_EXITED)
-    observer_notify_thread_exit (tp, silent);
-
-  /* Tag it as exited.  */
-  tp->state = THREAD_EXITED;
-  clear_thread_inferior_resources (tp);
-
   if (tpprev)
     tpprev->next = tp->next;
   else