diff options
author | Pedro Alves <palves@redhat.com> | 2009-10-28 16:33:01 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-10-28 16:33:01 +0000 |
commit | c4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143 (patch) | |
tree | 65a0829085437b0c8446d586447b0d3e02e78c61 /gdb | |
parent | 9a7071a8ce92ca34996d97b77e72ac8cc3946cd6 (diff) | |
download | gdb-c4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143.zip gdb-c4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143.tar.gz gdb-c4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143.tar.bz2 |
* infrun.c (keep_going): Wrap with resume_cleanups.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/infrun.c | 7 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a73039b..c080900 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2009-10-28 Pedro Alves <pedro@codesourcery.com> + + * infrun.c (keep_going): Wrap with resume_cleanups. + 2009-10-27 Paul Pluzhnikov <ppluzhnikov@google.com> * MAINTAINERS: Add self to "modify-after-approval" maintainers. diff --git a/gdb/infrun.c b/gdb/infrun.c index 586746a..842ff6b 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -4812,6 +4812,10 @@ stop_stepping (struct execution_control_state *ecs) static void keep_going (struct execution_control_state *ecs) { + /* Make sure normal_stop is called if we get a QUIT handled before + reaching resume. */ + struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0); + /* Save the pc before execution, to compare with pc after stop. */ ecs->event_thread->prev_pc = regcache_read_pc (get_thread_regcache (ecs->ptid)); @@ -4825,6 +4829,8 @@ keep_going (struct execution_control_state *ecs) /* We took a signal (which we are supposed to pass through to the inferior, else we'd not get here) and we haven't yet gotten our trap. Simply continue. */ + + discard_cleanups (old_cleanups); resume (currently_stepping (ecs->event_thread), ecs->event_thread->stop_signal); } @@ -4887,6 +4893,7 @@ keep_going (struct execution_control_state *ecs) && !signal_program[ecs->event_thread->stop_signal]) ecs->event_thread->stop_signal = TARGET_SIGNAL_0; + discard_cleanups (old_cleanups); resume (currently_stepping (ecs->event_thread), ecs->event_thread->stop_signal); } |