summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Machado <luisgpm@br.ibm.com>2008-07-15 17:25:21 +0000
committerLuis Machado <luisgpm@br.ibm.com>2008-07-15 17:25:21 +0000
commit9a9e3dc8a3893188a602cc17895e6ed01a2b135b (patch)
tree5fc85f1eb1e553701bd5b8281e0bd3489ceda58d
parent95cf58e7bc6daef72eea9ec55ee86af32d007e8b (diff)
downloadgdb-9a9e3dc8a3893188a602cc17895e6ed01a2b135b.tar.gz
* infrun.c (handle_inferior_event): Tag threads as stopped
before inserting breakpoints.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/infrun.c46
2 files changed, 28 insertions, 23 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 883c44d296f..f4112195f93 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2008-07-15 Luis Machado <luisgpm@br.ibm.com>
+
+ * infrun.c (handle_inferior_event): Tag threads as stopped
+ before inserting breakpoints.
+
2008-07-15 Hui Zhu <teawater@gmail.com>
* MAINTAINERS: Added myself to section Write After Approval.
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 410c6dd384f..2f32a82b5ba 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -1828,6 +1828,29 @@ handle_inferior_event (struct execution_control_state *ecs)
adjust_pc_after_break (ecs);
+ reinit_frame_cache ();
+
+ /* If it's a new process, add it to the thread database */
+
+ ecs->new_thread_event = (!ptid_equal (ecs->ptid, inferior_ptid)
+ && !ptid_equal (ecs->ptid, minus_one_ptid)
+ && !in_thread_list (ecs->ptid));
+
+ if (ecs->ws.kind != TARGET_WAITKIND_EXITED
+ && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED && ecs->new_thread_event)
+ add_thread (ecs->ptid);
+
+ if (ecs->ws.kind != TARGET_WAITKIND_IGNORE)
+ {
+ /* 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);
+ }
+
switch (infwait_state)
{
case infwait_thread_hop_state:
@@ -1867,29 +1890,6 @@ handle_inferior_event (struct execution_control_state *ecs)
}
infwait_state = infwait_normal_state;
- reinit_frame_cache ();
-
- /* If it's a new process, add it to the thread database */
-
- ecs->new_thread_event = (!ptid_equal (ecs->ptid, inferior_ptid)
- && !ptid_equal (ecs->ptid, minus_one_ptid)
- && !in_thread_list (ecs->ptid));
-
- if (ecs->ws.kind != TARGET_WAITKIND_EXITED
- && ecs->ws.kind != TARGET_WAITKIND_SIGNALLED && ecs->new_thread_event)
- add_thread (ecs->ptid);
-
- if (ecs->ws.kind != TARGET_WAITKIND_IGNORE)
- {
- /* 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);
- }
-
switch (ecs->ws.kind)
{
case TARGET_WAITKIND_LOADED: