From 642a5a8534dc382c2e6ab534186139d53d8af346 Mon Sep 17 00:00:00 2001 From: palves Date: Fri, 13 Jan 2012 20:02:36 +0000 Subject: [PATCH] 2012-01-13 Pedro Alves * server.c (main): Avoid infinite loop while detaching/killing after a longjmp. --- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/server.c | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 4bbba373e2..89a4cdde12 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2012-01-13 Pedro Alves + + * server.c (main): Avoid infinite loop while detaching/killing + after a longjmp. + 2012-01-09 Doug Evans * server.c (start_inferior): Set last_ptid in --wrapper case. diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index a3bc6c9c2e..f312a5c650 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -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); } -- 2.11.0