2012-01-23 Pedro Alves <palves@redhat.com>
authorPedro Alves <palves@redhat.com>
Mon, 23 Jan 2012 16:40:26 +0000 (16:40 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 23 Jan 2012 16:40:26 +0000 (16:40 +0000)
* server.c (main): Avoid yet another case of infinite loop while
detaching/killing after a longjmp.

gdb/gdbserver/ChangeLog
gdb/gdbserver/server.c

index dfc5cdd88041349ab495c8379a6ebdb9799ba70e..57ac46dd38f29a07c25fd10b1c3df8567000c91a 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-23  Pedro Alves  <palves@redhat.com>
+
+       * server.c (main): Avoid yet another case of infinite loop while
+       detaching/killing after a longjmp.
+
 2012-01-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Code cleanup.
index 3080a0c3389e87b0998a0cdcb1bf61cb9e5be83d..c1788a90f85ca3f4c6ee52eec7d0cc72d83ede80 100644 (file)
@@ -2727,13 +2727,10 @@ main (int argc, char *argv[])
         inferiors, we'd end up here again, stuck in an infinite loop
         trap.  Be sure that if that happens, we exit immediately
         instead.  */
-      if (setjmp (toplevel))
-       {
-         fprintf (stderr, "Detach or kill failed.  Exiting\n");
-         exit (1);
-       }
-
-      detach_or_kill_for_exit ();
+      if (setjmp (toplevel) == 0)
+       detach_or_kill_for_exit ();
+      else
+       fprintf (stderr, "Detach or kill failed.  Exiting\n");
       exit (1);
     }
 
@@ -2779,8 +2776,20 @@ main (int argc, char *argv[])
 
       if (exit_requested || run_once)
        {
-         detach_or_kill_for_exit ();
-         exit (0);
+         /* If something fails and longjmps while detaching or
+            killing inferiors, we'd end up here again, stuck in an
+            infinite loop trap.  Be sure that if that happens, we
+            exit immediately instead.  */
+         if (setjmp (toplevel) == 0)
+           {
+             detach_or_kill_for_exit ();
+             exit (0);
+           }
+         else
+           {
+             fprintf (stderr, "Detach or kill failed.  Exiting\n");
+             exit (1);
+           }
        }
 
       fprintf (stderr,