* infrun.c (handle_inferior_event): Correctly tag non-executing
threads in multi-process. (normal_stop): Correctly tag stopped threads in multi-process.
This commit is contained in:
parent
48aa3c2705
commit
48844aa658
2 changed files with 34 additions and 16 deletions
|
@ -1,3 +1,9 @@
|
|||
2008-12-12 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* infrun.c (handle_inferior_event): Correctly tag non-executing
|
||||
threads in multi-process.
|
||||
(normal_stop): Correctly tag stopped threads in multi-process.
|
||||
|
||||
2008-12-12 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* remote.c (extended_remote_mourn_1): Always call
|
||||
|
|
44
gdb/infrun.c
44
gdb/infrun.c
|
@ -2141,13 +2141,17 @@ handle_inferior_event (struct execution_control_state *ecs)
|
|||
{
|
||||
breakpoint_retire_moribund ();
|
||||
|
||||
/* Mark the non-executing threads accordingly. */
|
||||
if (!non_stop
|
||||
|| ecs->ws.kind == TARGET_WAITKIND_EXITED
|
||||
|| ecs->ws.kind == TARGET_WAITKIND_SIGNALLED)
|
||||
set_executing (pid_to_ptid (-1), 0);
|
||||
else
|
||||
set_executing (ecs->ptid, 0);
|
||||
/* Mark the non-executing threads accordingly. In all-stop, all
|
||||
threads of all processes are stopped when we get any event
|
||||
reported. In non-stop mode, only the event thread stops. If
|
||||
we're handling a process exit in non-stop mode, there's
|
||||
nothing to do, as threads of the dead process are gone, and
|
||||
threads of any other process were left running. */
|
||||
if (!non_stop)
|
||||
set_executing (minus_one_ptid, 0);
|
||||
else if (ecs->ws.kind != TARGET_WAITKIND_SIGNALLED
|
||||
&& ecs->ws.kind != TARGET_WAITKIND_EXITED)
|
||||
set_executing (inferior_ptid, 0);
|
||||
}
|
||||
|
||||
switch (infwait_state)
|
||||
|
@ -4372,17 +4376,25 @@ done:
|
|||
else
|
||||
observer_notify_normal_stop (NULL);
|
||||
}
|
||||
if (target_has_execution
|
||||
&& last.kind != TARGET_WAITKIND_SIGNALLED
|
||||
&& last.kind != TARGET_WAITKIND_EXITED)
|
||||
{
|
||||
/* Delete the breakpoint we stopped at, if it wants to be deleted.
|
||||
Delete any breakpoint that is to be deleted at the next stop. */
|
||||
breakpoint_auto_delete (inferior_thread ()->stop_bpstat);
|
||||
|
||||
if (target_has_execution)
|
||||
{
|
||||
if (last.kind != TARGET_WAITKIND_SIGNALLED
|
||||
&& last.kind != TARGET_WAITKIND_EXITED)
|
||||
/* Delete the breakpoint we stopped at, if it wants to be deleted.
|
||||
Delete any breakpoint that is to be deleted at the next stop. */
|
||||
breakpoint_auto_delete (inferior_thread ()->stop_bpstat);
|
||||
|
||||
/* Mark the stopped threads accordingly. In all-stop, all
|
||||
threads of all processes are stopped when we get any event
|
||||
reported. In non-stop mode, only the event thread stops. If
|
||||
we're handling a process exit in non-stop mode, there's
|
||||
nothing to do, as threads of the dead process are gone, and
|
||||
threads of any other process were left running. */
|
||||
if (!non_stop)
|
||||
set_running (pid_to_ptid (-1), 0);
|
||||
else
|
||||
set_running (minus_one_ptid, 0);
|
||||
else if (last.kind != TARGET_WAITKIND_SIGNALLED
|
||||
&& last.kind != TARGET_WAITKIND_EXITED)
|
||||
set_running (inferior_ptid, 0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue