aboutsummaryrefslogtreecommitdiff
path: root/gdb/infrun.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2009-10-28 16:33:01 +0000
committerPedro Alves <palves@redhat.com>2009-10-28 16:33:01 +0000
commitc4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143 (patch)
tree65a0829085437b0c8446d586447b0d3e02e78c61 /gdb/infrun.c
parent9a7071a8ce92ca34996d97b77e72ac8cc3946cd6 (diff)
downloadgdb-c4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143.zip
gdb-c4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143.tar.gz
gdb-c4dbc9afcc11c0d46e52bc6dafaabc76d8a3a143.tar.bz2
* infrun.c (keep_going): Wrap with resume_cleanups.
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r--gdb/infrun.c7
1 files changed, 7 insertions, 0 deletions
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);
}