Fix double prompt
[external/binutils.git] / gdb / inf-loop.c
index 247e9d6..d4f9a35 100644 (file)
@@ -33,8 +33,6 @@
 #include "top.h"
 #include "observer.h"
 
-static int fetch_inferior_event_wrapper (gdb_client_data client_data);
-
 /* General function to handle events in the inferior.  So far it just
    takes care of detecting errors reported by select() or poll(),
    otherwise it assumes that all is OK, and goes on reading data from
@@ -48,19 +46,26 @@ inferior_event_handler (enum inferior_event_type event_type,
   switch (event_type)
     {
     case INF_REG_EVENT:
-      /* Use catch errors for now, until the inner layers of
+      /* Catch errors for now, until the inner layers of
         fetch_inferior_event (i.e. readchar) can return meaningful
         error status.  If an error occurs while getting an event from
         the target, just cancel the current command.  */
-      if (!catch_errors (fetch_inferior_event_wrapper, 
-                        client_data, "", RETURN_MASK_ALL))
-       {
-         bpstat_clear_actions ();
-         do_all_intermediate_continuations (1);
-         do_all_continuations (1);
-         async_enable_stdin ();
-         observer_notify_command_error ();
-       }
+      {
+       volatile struct gdb_exception ex;
+
+       TRY_CATCH (ex, RETURN_MASK_ALL)
+         {
+           fetch_inferior_event (client_data);
+         }
+       if (ex.reason < 0)
+         {
+           bpstat_clear_actions ();
+           do_all_intermediate_continuations (1);
+           do_all_continuations (1);
+
+           throw_exception (ex);
+         }
+      }
       break;
 
     case INF_EXEC_COMPLETE:
@@ -140,10 +145,3 @@ inferior_event_handler (enum inferior_event_type event_type,
 
   discard_cleanups (cleanup_if_error);
 }
-
-static int 
-fetch_inferior_event_wrapper (gdb_client_data client_data)
-{
-  fetch_inferior_event (client_data);
-  return 1;
-}