* inf-loop.c (inferior_event_handler): On INF_ERROR and
authorPedro Alves <palves@redhat.com>
Tue, 4 Nov 2008 20:52:24 +0000 (20:52 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 4 Nov 2008 20:52:24 +0000 (20:52 +0000)
INF_REG_EVENT throwing, don't call target_async or pop_target.
Call pop_all_targets_above.
* remote.c (remote_close): Call remote_terminal_ours.  Don't call
signal or target_async.

gdb/ChangeLog
gdb/inf-loop.c
gdb/remote.c

index 45bbb122ecc8f7f8c5ae5dfbe29d09b6f91ebec3..ea9c1d8ac82bed7226490061bcb2fc0fbc479e6b 100644 (file)
@@ -1,3 +1,11 @@
+2008-11-04  Pedro Alves  <pedro@codesourcery.com>
+
+       * inf-loop.c (inferior_event_handler): On INF_ERROR and
+       INF_REG_EVENT throwing, don't call target_async or pop_target.
+       Call pop_all_targets_above.
+       * remote.c (remote_close): Call remote_terminal_ours.  Don't call
+       signal or target_async.
+
 2008-11-04  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * eval.c (evaluate_subexp_standard): Assert that there is at
index 8c2c282e18be3e5bb217b5ffe63dcf9f9623420b..2e0f4d26770cb0814fae6d5a9f0fa720805a96c0 100644 (file)
@@ -50,8 +50,7 @@ inferior_event_handler (enum inferior_event_type event_type,
     {
     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 ();
@@ -65,8 +64,7 @@ inferior_event_handler (enum inferior_event_type event_type,
       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 ();
index a5589f6321589193a8d5059ebe0b8929054d5c49..f4d6c1f48cd8fa7b1dd405024afb9d06f3a16142 100644 (file)
@@ -232,6 +232,8 @@ static int peek_stop_reply (ptid_t ptid);
 static void remote_async_inferior_event_handler (gdb_client_data);
 static void remote_async_get_pending_events_handler (gdb_client_data);
 
+static void remote_terminal_ours (void);
+
 /* The non-stop remote protocol provisions for one pending stop reply.
    This is where we keep it until it is acknowledged.  */
 
@@ -2287,18 +2289,15 @@ extended_remote_restart (void)
 static void
 remote_close (int quitting)
 {
-  if (remote_desc)
-    {
-      /* Unregister the file descriptor from the event loop.  */
-      if (target_is_async_p ())
-       target_async (NULL, 0);
-      serial_close (remote_desc);
-      remote_desc = NULL;
-    }
+  if (remote_desc == NULL)
+    return; /* already closed */
 
-  /* Make sure we don't leave the async SIGINT signal handler
-     installed.  */
-  signal (SIGINT, handle_sigint);
+  /* Make sure we leave stdin registered in the event loop, and we
+     don't leave the async SIGINT signal handler installed.  */
+  remote_terminal_ours ();
+
+  serial_close (remote_desc);
+  remote_desc = NULL;
 
   /* We don't have a connection to the remote stub anymore.  Get rid
      of all the inferiors and their threads we were controlling.  */