Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2013-03-01 19:48:14 +0400
committerChristopher Faylor <me@cgf.cx>2013-03-01 19:48:14 +0400
commitaad4a3c932726b6c33e43594a17c1f468f0911cf (patch)
tree72adb47221ce07e5346c83491e7d93f21318c898
parenta4239bd48db193e9049384384d3f28f0f4695af2 (diff)
* exceptions.cc (exception::handle): Eliminate buggy recursed value and just
check if we're exiting.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/exceptions.cc6
2 files changed, 8 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 81ecf55c7..66a1cc6a8 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2013-03-01 Christopher Faylor <me.cygwin2013@cgf.cx>
+
+ * exceptions.cc (exception::handle): Eliminate buggy recursed value and
+ just check if we're exiting.
+
2013-02-26 Corinna Vinschen <corinna@vinschen.de>
* include/pthread.h (pthread_atfork): Add missing declaration.
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index b3e327779..c7747388c 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -469,7 +469,6 @@ int
exception::handle (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in, void *)
{
static bool NO_COPY debugging;
- static int NO_COPY recursed;
_cygtls& me = _my_tls;
if (debugging && ++debugging < 500000)
@@ -616,8 +615,9 @@ exception::handle (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in, void
/* Another exception could happen while tracing or while exiting.
Only do this once. */
- if (recursed++)
- api_fatal ("Error while dumping state (probably corrupted stack)");
+ if (exit_state >= ES_SIGNAL_EXIT
+ && (NTSTATUS) e->ExceptionCode != STATUS_CONTROL_C_EXIT)
+ api_fatal ("Exception during process exit");
else if (!try_to_debug (0))
rtl_unwind (frame, e);
else