X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Finf-loop.c;h=f0d8def14157c5c0e6da3aae8fb6c11cdb443b18;hb=deeafabb678e59d8585be6d765c7fbd0e7060b6c;hp=8aecfe6af50f873f116e72c42d0b3344920d68fd;hpb=a85a3079233ddf4c5537ec90c03d3394b93ef355;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/inf-loop.c b/gdb/inf-loop.c index 8aecfe6af5..f0d8def141 100644 --- a/gdb/inf-loop.c +++ b/gdb/inf-loop.c @@ -1,5 +1,5 @@ /* Handling of inferior events for the event loop for GDB, the GNU debugger. - Copyright (C) 1999-2015 Free Software Foundation, Inc. + Copyright (C) 1999-2019 Free Software Foundation, Inc. Written by Elena Zannoni of Cygnus Solutions. This file is part of GDB. @@ -20,7 +20,6 @@ #include "defs.h" #include "inferior.h" #include "infrun.h" -#include "target.h" /* For enum inferior_event_type. */ #include "event-loop.h" #include "event-top.h" #include "inf-loop.h" @@ -30,7 +29,7 @@ #include "continuations.h" #include "interps.h" #include "top.h" -#include "observer.h" +#include "observable.h" /* General function to handle events in the inferior. */ @@ -56,31 +55,37 @@ inferior_event_handler (enum inferior_event_type event_type, /* Do all continuations associated with the whole inferior (not a particular thread). */ - if (!ptid_equal (inferior_ptid, null_ptid)) + if (inferior_ptid != null_ptid) do_all_inferior_continuations (0); /* When running a command list (from a user command, say), these are only run when the command list is all done. */ - if (interpreter_async) + if (current_ui->async) { check_frame_language_change (); /* Don't propagate breakpoint commands errors. Either we're stopping or some command resumes the inferior. The user will be informed. */ - TRY + try { bpstat_do_actions (); } - CATCH (e, RETURN_MASK_ALL) + catch (const gdb_exception &e) { - exception_print (gdb_stderr, e); + /* If the user was running a foreground execution + command, then propagate the error so that the prompt + can be reenabled. Otherwise, the user already has + the prompt and is typing some unrelated command, so + just inform the user and swallow the exception. */ + if (current_ui->prompt_state == PROMPT_BLOCKED) + throw; + else + exception_print (gdb_stderr, e); } - END_CATCH } break; - case INF_TIMER: default: printf_unfiltered (_("Event type not recognized.\n")); break;