* inf-loop.c (inferior_event_handler): Call bpstat_do_action,
authorVladimir Prus <vladimir@codesourcery.com>
Mon, 5 May 2008 09:02:59 +0000 (09:02 +0000)
committerVladimir Prus <vladimir@codesourcery.com>
Mon, 5 May 2008 09:02:59 +0000 (09:02 +0000)
and catch all exceptions from it.
* top.c (command_line_handler_continuation): Don't
call bpstat_do_action here.

gdb/ChangeLog
gdb/inf-loop.c
gdb/top.c

index 447b926..42155fc 100644 (file)
@@ -1,3 +1,10 @@
+2008-05-05  Vladimir Prus  <vladimir@codesourcery.com>
+
+       * inf-loop.c (inferior_event_handler): Call bpstat_do_action,
+       and catch all exceptions from it.
+       * top.c (command_line_handler_continuation): Don't
+       call bpstat_do_action here.
+
 2008-05-04  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * dwarf2read.c (struct dwarf2_cu): Add type_hash.
index 4c61dae..4889c6f 100644 (file)
@@ -43,6 +43,7 @@ void
 inferior_event_handler (enum inferior_event_type event_type, 
                        gdb_client_data client_data)
 {
+  struct gdb_exception e;
   int was_sync = 0;
   switch (event_type)
     {
@@ -91,6 +92,12 @@ inferior_event_handler (enum inferior_event_type event_type,
       was_sync = sync_execution;
       async_enable_stdin ();
 
+      /* If there's an error doing breakpoint commands, we don't
+        want to throw -- continuation might still do something.  */
+      TRY_CATCH (e, RETURN_MASK_ALL)
+       {
+         bpstat_do_actions (&stop_bpstat);
+       }
       /* If we were doing a multi-step (eg: step n, next n), but it
         got interrupted by a breakpoint, still do the pending
         continuations.  The continuation itself is responsible for
index 2454d24..feefcf0 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -379,8 +379,6 @@ command_line_handler_continuation (struct continuation_arg *arg, int error)
   if (error)
     return;
 
-  bpstat_do_actions (&stop_bpstat);
-
   if (display_time)
     {
       long cmd_time = get_run_time () - time_at_cmd_start;