From b2cd6b294833b0dd0d5b913580fa7e5a72565b41 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 21 Sep 2011 15:21:28 +0000 Subject: [PATCH] * event-top.c (async_disconnect): If an exception is thrown from quit_cover, call pop_all_targets. Use TRY_CATCH instead of catch_errors. * top.c (quit_cover): Return void and take no arguments. * top.h (quit_cover): Update prototype. --- gdb/ChangeLog | 8 ++++++++ gdb/event-top.c | 22 +++++++++++++++++++--- gdb/top.c | 5 ++--- gdb/top.h | 2 +- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f15e6167352..49687c9994f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2011-09-21 Joseph Myers + + * event-top.c (async_disconnect): If an exception is thrown from + quit_cover, call pop_all_targets. Use TRY_CATCH instead of + catch_errors. + * top.c (quit_cover): Return void and take no arguments. + * top.h (quit_cover): Update prototype. + 2011-09-20 Joseph Myers * mi/mi-main.c (mi_load_progress): Restore saved_uiout value to diff --git a/gdb/event-top.c b/gdb/event-top.c index ff2aefbc457..a2766906e46 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -870,9 +870,25 @@ handle_sighup (int sig) static void async_disconnect (gdb_client_data arg) { - catch_errors (quit_cover, NULL, - "Could not kill the program being debugged", - RETURN_MASK_ALL); + volatile struct gdb_exception exception; + + TRY_CATCH (exception, RETURN_MASK_ALL) + { + quit_cover (); + } + + if (exception.reason < 0) + { + fputs_filtered ("Could not kill the program being debugged", + gdb_stderr); + exception_print (gdb_stderr, exception); + } + + TRY_CATCH (exception, RETURN_MASK_ALL) + { + pop_all_targets (1); + } + signal (SIGHUP, SIG_DFL); /*FIXME: ??????????? */ raise (SIGHUP); } diff --git a/gdb/top.c b/gdb/top.c index 22178b73ba4..ec475a8e5ac 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -288,14 +288,13 @@ void (*deprecated_context_hook) (int id); /* NOTE 1999-04-29: This function will be static again, once we modify gdb to use the event loop as the default command loop and we merge event-top.c into this file, top.c. */ -/* static */ int -quit_cover (void *s) +/* static */ void +quit_cover (void) { caution = 0; /* Throw caution to the wind -- we're exiting. This prevents asking the user dumb questions. */ quit_command ((char *) 0, 0); - return 0; } #endif /* defined SIGHUP */ diff --git a/gdb/top.h b/gdb/top.h index e36201c5a68..3e6679c0ea1 100644 --- a/gdb/top.h +++ b/gdb/top.h @@ -41,7 +41,7 @@ extern void command_loop (void); extern int quit_confirm (void); extern void quit_force (char *, int); extern void quit_command (char *, int); -extern int quit_cover (void *); +extern void quit_cover (void); extern void execute_command (char *, int); /* Prepare for execution of a command. -- 2.30.2