* infrun.c (keep_going): Wrap with resume_cleanups.
authorPedro Alves <palves@redhat.com>
Wed, 28 Oct 2009 16:33:01 +0000 (16:33 +0000)
committerPedro Alves <palves@redhat.com>
Wed, 28 Oct 2009 16:33:01 +0000 (16:33 +0000)
gdb/ChangeLog
gdb/infrun.c

index a73039b..c080900 100644 (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>
        
        * MAINTAINERS: Add self to "modify-after-approval" maintainers.
index 586746a..842ff6b 100644 (file)
@@ -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);
     }