aboutsummaryrefslogtreecommitdiffstats
path: root/lib/System/Unix/Signals.inc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/System/Unix/Signals.inc')
-rw-r--r--lib/System/Unix/Signals.inc6
1 files changed, 5 insertions, 1 deletions
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);
}