summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2017-04-26 18:31:08 +0900
committerAdam Jackson <ajax@redhat.com>2017-04-26 16:07:19 -0400
commit27a6b9f7c84c914d0f5909ec1069d72f5035bc04 (patch)
treea202f04eb2c42831c535d1fcfb90089d327b4cbf
parent23f2f1932a1d3f36468eaf735ae34934d246567b (diff)
os: Handle SIGABRT
Without this, assertion failures can make life hard for users and those trying to help them. v2: * Change commit log wording slightly to "can make life hard", since apparently e.g. logind can alleviate that somewhat. * Set default handler for SIGABRT in hw/xfree86/common/xf86Init.c:InstallSignalHandlers() and hw/xquartz/quartz.c:QuartzInitOutput() (Eric Anholt) Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
-rw-r--r--hw/xfree86/common/xf86Init.c1
-rw-r--r--hw/xquartz/quartz.c1
-rw-r--r--os/osinit.c1
-rw-r--r--os/utils.c6
4 files changed, 9 insertions, 0 deletions
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index d3c7c47b0..d0bd6e95b 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -309,6 +309,7 @@ InstallSignalHandlers(void)
}
else {
OsSignal(SIGSEGV, SIG_DFL);
+ OsSignal(SIGABRT, SIG_DFL);
OsSignal(SIGILL, SIG_DFL);
#ifdef SIGEMT
OsSignal(SIGEMT, SIG_DFL);
diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index c8b6f966d..c8ea3bf8b 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -178,6 +178,7 @@ QuartzInitOutput(int argc,
{
/* For XQuartz, we want to just use the default signal handler to work better with CrashTracer */
signal(SIGSEGV, SIG_DFL);
+ signal(SIGABRT, SIG_DFL);
signal(SIGILL, SIG_DFL);
#ifdef SIGEMT
signal(SIGEMT, SIG_DFL);
diff --git a/os/osinit.c b/os/osinit.c
index 5b2f6b546..cd769d181 100644
--- a/os/osinit.c
+++ b/os/osinit.c
@@ -173,6 +173,7 @@ OsInit(void)
int i;
int siglist[] = { SIGSEGV, SIGQUIT, SIGILL, SIGFPE, SIGBUS,
+ SIGABRT,
SIGSYS,
SIGXCPU,
SIGXFSZ,
diff --git a/os/utils.c b/os/utils.c
index 3f8bac5c6..226b9c817 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -1353,6 +1353,12 @@ OsAbort(void)
#ifndef __APPLE__
OsBlockSignals();
#endif
+#if !defined(WIN32) || defined(__CYGWIN__)
+ /* abort() raises SIGABRT, so we have to stop handling that to prevent
+ * recursion
+ */
+ OsSignal(SIGABRT, SIG_DFL);
+#endif
abort();
}