2012-01-13 Pedro Alves <palves@redhat.com>
authorPedro Alves <palves@redhat.com>
Fri, 13 Jan 2012 20:02:36 +0000 (20:02 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 13 Jan 2012 20:02:36 +0000 (20:02 +0000)
* server.c (main): Avoid infinite loop while detaching/killing
after a longjmp.

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

index 4bbba373e22566d80732d70da2ea9950dbb09c5d..89a4cdde127f28f7fa86ba26cf970ed283759570 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-13  Pedro Alves  <palves@redhat.com>
+
+       * server.c (main): Avoid infinite loop while detaching/killing
+       after a longjmp.
+
 2012-01-09  Doug Evans  <dje@google.com>
 
        * server.c (start_inferior): Set last_ptid in --wrapper case.
index a3bc6c9c2e380cfb4112195869631c4014adf2ef..f312a5c650a876e349c25b55fe7296a756eafc1f 100644 (file)
@@ -2719,6 +2719,16 @@ main (int argc, char *argv[])
 
   if (setjmp (toplevel))
     {
+      /* 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))
+       {
+         fprintf (stderr, "Detach or kill failed.  Exiting\n");
+         exit (1);
+       }
+
       detach_or_kill_for_exit ();
       exit (1);
     }