From: Pedro Alves Date: Mon, 23 Jan 2012 16:40:26 +0000 (+0000) Subject: 2012-01-23 Pedro Alves X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=01b1789443badeda4f875ed61a194ca419982622;p=binutils-gdb.git 2012-01-23 Pedro Alves * server.c (main): Avoid yet another case of infinite loop while detaching/killing after a longjmp. --- diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index dfc5cdd8804..57ac46dd38f 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2012-01-23 Pedro Alves + + * server.c (main): Avoid yet another case of infinite loop while + detaching/killing after a longjmp. + 2012-01-20 Jan Kratochvil Code cleanup. diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 3080a0c3389..c1788a90f85 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -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,