From a339c989c7bb65677c1544d613e65699030f9466 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Mon, 20 Feb 2006 02:04:31 +0000 Subject: [PATCH] * exceptions.cc (stackdump): Avoid dumping more than once. --- winsup/cygwin/ChangeLog | 4 ++++ winsup/cygwin/dcrt0.cc | 12 ++++++++++++ winsup/cygwin/exceptions.cc | 5 ++++- winsup/cygwin/timer.cc | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 16c43aebe..fd94cae92 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,7 @@ +2006-02-19 Christopher Faylor + + * exceptions.cc (stackdump): Avoid dumping more than once. + 2006-02-19 Christopher Faylor * fhandler_disk_file.cc (fhandler_disk_file::opendir): Use NtOpenFile diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 8122939b6..a1cacc86c 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -124,6 +124,18 @@ extern "C" #endif }; +#ifdef DEBUGGING +void __stdcall +envvar () +{ + const char *s = "PATH"; + char buf[4096]; + Sleep (500); + small_printf ("%d = GetEnvironmentVariable (\"%s\")\n", GetEnvironmentVariable (s, buf, sizeof buf), s); + small_printf ("value = '%s'\n", buf); +} +#endif + char *old_title; char title_buf[TITLESIZE + 1]; diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 3f2c13c88..cce217e87 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -262,13 +262,16 @@ static void stackdump (DWORD ebp, int open_file, bool isexception) { extern unsigned long rlim_core; + static bool already_dumped; - if (rlim_core == 0UL) + if (rlim_core == 0UL || (open_file && already_dumped)) return; if (open_file) open_stackdumpfile (); + already_dumped = true; + int i; thestack.init (ebp, 1, !isexception); /* Initialize from the input CONTEXT */ diff --git a/winsup/cygwin/timer.cc b/winsup/cygwin/timer.cc index 7dea7ea69..f9205f413 100644 --- a/winsup/cygwin/timer.cc +++ b/winsup/cygwin/timer.cc @@ -74,6 +74,7 @@ timer_tracker::cancel () SetEvent (hcancel); if (WaitForSingleObject (syncthread, INFINITE) != WAIT_OBJECT_0) api_fatal ("WFSO failed waiting for timer thread, %E"); + debug_printf ("cancelled"); return true; }