From 8c90c1370d95c5a3e70010dce217f163faea4a4b Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Tue, 15 Jul 2008 17:25:21 +0000 Subject: [PATCH] * infrun.c (handle_inferior_event): Tag threads as stopped before inserting breakpoints. --- gdb/ChangeLog | 5 +++++ gdb/infrun.c | 46 +++++++++++++++++++++++----------------------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 883c44d296..f4112195f9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-07-15 Luis Machado + + * infrun.c (handle_inferior_event): Tag threads as stopped + before inserting breakpoints. + 2008-07-15 Hui Zhu * MAINTAINERS: Added myself to section Write After Approval. diff --git a/gdb/infrun.c b/gdb/infrun.c index 410c6dd384..2f32a82b5b 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: