This fixes constantly replaying the exception if we have a segfault while a debugger is already attached, e.g. stracing a segv, see:
https://cygwin.com/pipermail/cygwin/2025-May/258144.html (I'm tempted to remove the 'debugging' static from exception::handle() and everything associated with it, since replaying the exception the next half a million times it's hit seems really weird) (This would seem to make try_to_debug() less useful, as it then does nothing if you're just run under gdb, but it's what the code used to do...) Fixes: 91457377d6c9 ("Cygwin: Make 'ulimit -c' control writing a coredump") --- winsup/cygwin/exceptions.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 9763a1b04..3a0315fd0 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -591,13 +591,16 @@ int exec_prepared_command (PWCHAR command) extern "C" int try_to_debug () { + if (!debugger_command) + return 0; + /* If already being debugged, break into the debugger (Note that this function can be called from places other than an exception) */ if (being_debugged ()) { extern void break_here (); break_here (); - return 1; + return 0; } /* Otherwise, invoke the JIT debugger, if set */ @@ -812,6 +815,8 @@ exception::handle (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in, else if (try_to_debug ()) { debugging = 1; + /* If a JIT debugger just attached, replay the exception for the benefit + of that */ return ExceptionContinueExecution; } -- 2.45.1
