This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[ob] remote, add inferior before its threads


I noticed that a new thread notification was being emited before
the corresponding new inferior notification.  Doesn't make much
sense, especially for MI.

Checked in.

-- 
Pedro Alves
2008-10-17  Pedro Alves  <pedro@codesourcery.com>

	* remote.c (record_currthread): Add inferior before child threads.
	(remote_threads_info): Check for exited threads.  Mention
	notification order.

---
 gdb/remote.c |   26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

Index: src/gdb/remote.c
===================================================================
--- src.orig/gdb/remote.c	2008-10-17 01:46:02.000000000 +0100
+++ src/gdb/remote.c	2008-10-17 01:54:26.000000000 +0100
@@ -1096,6 +1096,13 @@ record_currthread (ptid_t currthread)
 {
   general_thread = currthread;
 
+  /* When connecting to a target remote, or to a target
+     extended-remote which already was debugging an inferior, we may
+     not know about it yet.  Add it before adding its child thread, so
+     notifications are emitted in a sensible order.  */
+  if (!in_inferior_list (ptid_get_pid (currthread)))
+    add_inferior (ptid_get_pid (currthread));
+
   /* If this is a new thread, add it to GDB's thread list.
      If we leave it up to WFI to do this, bad things will happen.  */
 
@@ -1134,12 +1141,6 @@ record_currthread (ptid_t currthread)
       /* This is really a new thread.  Add it.  */
       add_thread (currthread);
     }
-
-  if (!in_inferior_list (ptid_get_pid (currthread)))
-    /* When connecting to a target remote, or to a target
-       extended-remote which already was debugging an inferior, we may
-       not know about it yet --- add it.  */
-    add_inferior (ptid_get_pid (currthread));
 }
 
 static char *last_pass_packet;
@@ -2098,13 +2099,16 @@ remote_threads_info (void)
 		{
 		  new_thread = read_ptid (bufp, &bufp);
 		  if (!ptid_equal (new_thread, null_ptid)
-		      && !in_thread_list (new_thread))
+		      && (!in_thread_list (new_thread)
+			  || is_exited (new_thread)))
 		    {
+		      /* When connected to a multi-process aware stub,
+			 "info threads" may show up threads of
+			 inferiors we didn't know about yet.  Add them
+			 now, and before adding any of its child
+			 threads, so notifications are emitted in a
+			 sensible order.  */
 		      if (!in_inferior_list (ptid_get_pid (new_thread)))
-			/* When connected to a multi-process aware
-			   stub, "info threads" may show up threads of
-			   inferiors we didn't know about yet.  Add
-			   them.  */
 			add_inferior (ptid_get_pid (new_thread));
 
 		      add_thread (new_thread);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]