/* 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.
{
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 ();
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 ();
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
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;