* infrun.c (keep_going): Wrap with resume_cleanups.

This commit is contained in:
Pedro Alves
2009-10-28 16:33:01 +00:00
parent 9a7071a8ce
commit c4dbc9afcc
2 changed files with 11 additions and 0 deletions

View File

@ -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> 2009-10-27 Paul Pluzhnikov <ppluzhnikov@google.com>
* MAINTAINERS: Add self to "modify-after-approval" maintainers. * MAINTAINERS: Add self to "modify-after-approval" maintainers.

View File

@ -4812,6 +4812,10 @@ stop_stepping (struct execution_control_state *ecs)
static void static void
keep_going (struct execution_control_state *ecs) 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. */ /* Save the pc before execution, to compare with pc after stop. */
ecs->event_thread->prev_pc ecs->event_thread->prev_pc
= regcache_read_pc (get_thread_regcache (ecs->ptid)); = 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 /* 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 the inferior, else we'd not get here) and we haven't yet
gotten our trap. Simply continue. */ gotten our trap. Simply continue. */
discard_cleanups (old_cleanups);
resume (currently_stepping (ecs->event_thread), resume (currently_stepping (ecs->event_thread),
ecs->event_thread->stop_signal); ecs->event_thread->stop_signal);
} }
@ -4887,6 +4893,7 @@ keep_going (struct execution_control_state *ecs)
&& !signal_program[ecs->event_thread->stop_signal]) && !signal_program[ecs->event_thread->stop_signal])
ecs->event_thread->stop_signal = TARGET_SIGNAL_0; ecs->event_thread->stop_signal = TARGET_SIGNAL_0;
discard_cleanups (old_cleanups);
resume (currently_stepping (ecs->event_thread), resume (currently_stepping (ecs->event_thread),
ecs->event_thread->stop_signal); ecs->event_thread->stop_signal);
} }