From ce5ce7edede13ce783c0825bea168c67b1edd0af Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Wed, 15 Oct 2008 21:39:53 +0000 Subject: [PATCH] * remote.c (remote_close): Unregister remote_desc from the event loop. Always restore the SIGINT handler. Discard all inferiors here. (remote_detach_1, remote_disconnect): Don't unregister the file descriptor from the event loop here. (interrupt_query, readchar, getpkt_sane): Pop the target instead of morning the current inferior. (remote_kill): Don't unregister the file descriptor from the event loop here. (remote_mourn_1): Don't discard inferiors here. --- gdb/ChangeLog | 13 +++++++++++++ gdb/remote.c | 45 ++++++++++++++++++++++----------------------- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d81cca8ecb0..965dd0bf606 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2008-10-15 Pedro Alves + + * remote.c (remote_close): Unregister remote_desc from the event + loop. Always restore the SIGINT handler. Discard all inferiors + here. + (remote_detach_1, remote_disconnect): Don't unregister the file + descriptor from the event loop here. + (interrupt_query, readchar, getpkt_sane): Pop the target instead + of morning the current inferior. + (remote_kill): Don't unregister the file descriptor from the event + loop here. + (remote_mourn_1): Don't discard inferiors here. + 2008-10-15 Pedro Alves * breakpoint.c (breakpoint_init_inferior): Clean up the moribund diff --git a/gdb/remote.c b/gdb/remote.c index 4196a2f3dd6..5d52cd7e7fd 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -2202,8 +2202,23 @@ static void remote_close (int quitting) { if (remote_desc) - serial_close (remote_desc); - remote_desc = NULL; + { + /* Unregister the file descriptor from the event loop. */ + if (target_is_async_p ()) + target_async (NULL, 0); + serial_close (remote_desc); + remote_desc = NULL; + } + + /* Make sure we don't leave the async SIGINT signal handler + installed. */ + signal (SIGINT, handle_sigint); + + /* We don't have a connection to the remote stub anymore. Get rid + of all the inferiors and their threads we were controlling. */ + discard_all_inferiors (); + + generic_mourn_inferior (); } /* Query the remote side for the text, data and bss offsets. */ @@ -3029,10 +3044,6 @@ remote_detach_1 (char *args, int from_tty, int extended) else error (_("Can't detach process.")); - /* Unregister the file descriptor from the event loop. */ - if (target_is_async_p ()) - serial_async (remote_desc, NULL, 0); - if (from_tty) { if (remote_multi_process_p (rs)) @@ -3071,10 +3082,6 @@ remote_disconnect (struct target_ops *target, char *args, int from_tty) if (args) error (_("Argument given to \"disconnect\" when remotely debugging.")); - /* Unregister the file descriptor from the event loop. */ - if (target_is_async_p ()) - serial_async (remote_desc, NULL, 0); - /* Make sure we unpush even the extended remote targets; mourn won't do it. So call remote_mourn_1 directly instead of target_mourn_inferior. */ @@ -3546,8 +3553,7 @@ interrupt_query (void) if (query ("Interrupted while waiting for the program.\n\ Give up (and stop debugging it)? ")) { - target_mourn_inferior (); - signal (SIGINT, handle_sigint); + pop_target (); deprecated_throw_reason (RETURN_QUIT); } @@ -4954,7 +4960,7 @@ readchar (int timeout) switch ((enum serial_rc) ch) { case SERIAL_EOF: - target_mourn_inferior (); + pop_target (); error (_("Remote connection closed")); /* no return */ case SERIAL_ERROR: @@ -5387,7 +5393,7 @@ getpkt_sane (char **buf, long *sizeof_buf, int forever) if (forever) /* Watchdog went off? Kill the target. */ { QUIT; - target_mourn_inferior (); + pop_target (); error (_("Watchdog timeout has expired. Target detached.")); } if (remote_debug) @@ -5437,10 +5443,6 @@ getpkt_sane (char **buf, long *sizeof_buf, int forever) static void remote_kill (void) { - /* Unregister the file descriptor from the event loop. */ - if (target_is_async_p ()) - serial_async (remote_desc, NULL, 0); - /* Use catch_errors so the user can quit from gdb even when we aren't on speaking terms with the remote system. */ catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR); @@ -5512,12 +5514,9 @@ remote_mourn (void) static void remote_mourn_1 (struct target_ops *target) { - /* Get rid of all the inferiors and their threads we were - controlling. */ - discard_all_inferiors (); - unpush_target (target); - generic_mourn_inferior (); + + /* remote_close takes care of cleaning up. */ } static int -- 2.30.2