From dc6830ff255a4fb9afd7683dd8a4cc0a342b44ee Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Fri, 16 Jun 2006 00:00:57 +0000 Subject: Only print the stack trace if it was requested. Previously, any call into the Signals module that registered the handlers would cause the stack trace to be generated. Now, you must explicitly call PrintStackTraceOnErrorSignal in order for that to happen. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28810 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/System/Unix/Signals.inc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/System/Unix') diff --git a/lib/System/Unix/Signals.inc b/lib/System/Unix/Signals.inc index a643dbf..4096ad2 100644 --- a/lib/System/Unix/Signals.inc +++ b/lib/System/Unix/Signals.inc @@ -24,6 +24,8 @@ namespace { +bool StackTraceRequested = false; + /// InterruptFunction - The function to call if ctrl-c is pressed. void (*InterruptFunction)() = 0; @@ -132,7 +134,8 @@ RETSIGTYPE SignalHandler(int Sig) { // Otherwise if it is a fault (like SEGV) output the stacktrace to // STDERR (if we can) and reissue the signal to die... - PrintStackTrace(); + if (StackTraceRequested) + PrintStackTrace(); signal(Sig, SIG_DFL); } @@ -178,6 +181,7 @@ void sys::RemoveDirectoryOnSignal(const llvm::sys::Path& path) { /// PrintStackTraceOnErrorSignal - When an error signal (such as SIBABRT or /// SIGSEGV) is delivered to the process, print a stack trace and then exit. void sys::PrintStackTraceOnErrorSignal() { + StackTraceRequested = true; std::for_each(KillSigs, KillSigsEnd, RegisterHandler); } -- cgit v1.1