diff options
author | Pedro Alves <palves@redhat.com> | 2008-12-16 22:54:36 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2008-12-16 22:54:36 +0000 |
commit | 5e0d5ae77c7956d323c09b9b61bbb8a72d044299 (patch) | |
tree | cfeffcfe9d54b7146f59545f3358bbcda865a12a | |
parent | 1c455146f805f11db47a26d6fe7726e3b49c0e84 (diff) | |
download | fsf-binutils-gdb-5e0d5ae77c7956d323c09b9b61bbb8a72d044299.zip fsf-binutils-gdb-5e0d5ae77c7956d323c09b9b61bbb8a72d044299.tar.gz fsf-binutils-gdb-5e0d5ae77c7956d323c09b9b61bbb8a72d044299.tar.bz2 |
Merge from head:
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.
-rw-r--r-- | gdb/ChangeLog.mp | 9 | ||||
-rw-r--r-- | gdb/infrun.c | 44 |
2 files changed, 37 insertions, 16 deletions
diff --git a/gdb/ChangeLog.mp b/gdb/ChangeLog.mp index c1fc365..75c58d3 100644 --- a/gdb/ChangeLog.mp +++ b/gdb/ChangeLog.mp @@ -3,6 +3,15 @@ Merge from head: 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-16 Pedro Alves <pedro@codesourcery.com> + + Merge from head: + 2008-12-12 Pedro Alves <pedro@codesourcery.com> + * remote.c (extended_remote_mourn_1): Always call generic_mourn_inferior. diff --git a/gdb/infrun.c b/gdb/infrun.c index 1019f1b..85f58ec 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -2135,13 +2135,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) @@ -4371,17 +4375,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); } |