{
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. */
/* 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;
{
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);