* 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:
Pedro Alves 2008-12-12 14:20:48 +00:00
parent 48aa3c2705
commit 48844aa658
2 changed files with 34 additions and 16 deletions

View File

@ -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

View File

@ -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);
}