summaryrefslogtreecommitdiff
path: root/gdb/remote.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/remote.c')
-rw-r--r--gdb/remote.c45
1 files changed, 22 insertions, 23 deletions
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