diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/infrun.c | 18 |
2 files changed, 15 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5353e34..8e1bd11 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2015-04-01 Pedro Alves <palves@redhat.com> + * infrun.c (wait_for_inferior): Install the + finish_thread_state_cleanup cleanup across the whole function, not + just around handle_inferior_event. + +2015-04-01 Pedro Alves <palves@redhat.com> + * infrun.c (resume) <step past permanent breakpoint>: Use do_target_resume. diff --git a/gdb/infrun.c b/gdb/infrun.c index d7c250e..18ce036 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -3132,6 +3132,7 @@ void wait_for_inferior (void) { struct cleanup *old_cleanups; + struct cleanup *thread_state_chain; if (debug_infrun) fprintf_unfiltered @@ -3141,11 +3142,15 @@ wait_for_inferior (void) = make_cleanup (delete_just_stopped_threads_infrun_breakpoints_cleanup, NULL); + /* If an error happens while handling the event, propagate GDB's + knowledge of the executing state to the frontend/user running + state. */ + thread_state_chain = make_cleanup (finish_thread_state_cleanup, &minus_one_ptid); + while (1) { struct execution_control_state ecss; struct execution_control_state *ecs = &ecss; - struct cleanup *old_chain; ptid_t waiton_ptid = minus_one_ptid; memset (ecs, 0, sizeof (*ecs)); @@ -3166,21 +3171,16 @@ wait_for_inferior (void) if (debug_infrun) print_target_wait_results (waiton_ptid, ecs->ptid, &ecs->ws); - /* If an error happens while handling the event, propagate GDB's - knowledge of the executing state to the frontend/user running - state. */ - old_chain = make_cleanup (finish_thread_state_cleanup, &minus_one_ptid); - /* Now figure out what to do with the result of the result. */ handle_inferior_event (ecs); - /* No error, don't finish the state yet. */ - discard_cleanups (old_chain); - if (!ecs->wait_some_more) break; } + /* No error, don't finish the state yet. */ + discard_cleanups (thread_state_chain); + do_cleanups (old_cleanups); } |