*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / inf-loop.c
index 8c2c282e18be3e5bb217b5ffe63dcf9f9623420b..898898531c8070d7f5f157c7091318e2eaa7a931 100644 (file)
@@ -1,5 +1,5 @@
 /* Handling of inferior events for the event loop for GDB, the GNU debugger.
-   Copyright (C) 1999, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
    Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
 
    This file is part of GDB.
@@ -50,8 +50,7 @@ inferior_event_handler (enum inferior_event_type event_type,
     {
     case INF_ERROR:
       printf_unfiltered (_("error detected from target.\n"));
-      target_async (NULL, 0);
-      pop_target ();
+      pop_all_targets_above (file_stratum, 0);
       discard_all_intermediate_continuations ();
       discard_all_continuations ();
       async_enable_stdin ();
@@ -65,8 +64,7 @@ inferior_event_handler (enum inferior_event_type event_type,
       if (!catch_errors (fetch_inferior_event_wrapper, 
                         client_data, "", RETURN_MASK_ALL))
        {
-         target_async (NULL, 0);
-         pop_target ();
+         pop_all_targets_above (file_stratum, 0);
          discard_all_intermediate_continuations ();
          discard_all_continuations ();
          async_enable_stdin ();
@@ -91,6 +89,11 @@ inferior_event_handler (enum inferior_event_type event_type,
       was_sync = sync_execution;
       async_enable_stdin ();
 
+      /* Do all continuations associated with the whole inferior (not
+        a particular thread).  */
+      if (!ptid_equal (inferior_ptid, null_ptid))
+       do_all_inferior_continuations ();
+
       /* 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
@@ -128,7 +131,10 @@ inferior_event_handler (enum inferior_event_type event_type,
          bpstat_do_actions ();
        }
 
-      if (!was_sync && !is_running (inferior_ptid) && exec_done_display_p)
+      if (!was_sync
+         && exec_done_display_p
+         && (ptid_equal (inferior_ptid, null_ptid)
+             || !is_running (inferior_ptid)))
        printf_unfiltered (_("completed.\n"));
       break;
 
This page took 0.023285 seconds and 4 git commands to generate.