From 0a1c1ff4f99a7eb53ff6cdd95ce5d7ac263e77d2 Mon Sep 17 00:00:00 2001 From: Daniel Albers Date: Tue, 19 May 2009 00:29:33 +0200 Subject: [PATCH] Disable crashhandler if coredumps are enabled Fixes #673. --- src/common/quassel.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/common/quassel.cpp b/src/common/quassel.cpp index 4be4db16..33b6cbd4 100644 --- a/src/common/quassel.cpp +++ b/src/common/quassel.cpp @@ -22,6 +22,9 @@ #include #include +#if !defined Q_OS_WIN32 && !defined Q_OS_MAC +# include +#endif #include #include @@ -55,11 +58,22 @@ Quassel::Quassel() { // we have crashhandler for win32 and unix (based on execinfo). // on mac os we use it's integrated backtrace generator #if defined(Q_OS_WIN32) || (defined(HAVE_EXECINFO) && !defined(Q_OS_MAC)) - signal(SIGABRT, handleSignal); - signal(SIGSEGV, handleSignal); -# ifndef Q_OS_WIN32 - signal(SIGBUS, handleSignal); -# endif + +# ifndef Q_OS_WIN32 + // we only handle crashes ourselves if coredumps are disabled + struct rlimit *limit = (rlimit *) malloc(sizeof(struct rlimit)); + int rc = getrlimit(RLIMIT_CORE, limit); + + if(rc == -1 || !((long)limit->rlim_cur > 0 || limit->rlim_cur == RLIM_INFINITY)) { +# endif + signal(SIGABRT, handleSignal); + signal(SIGSEGV, handleSignal); +# ifndef Q_OS_WIN32 + signal(SIGBUS, handleSignal); + } + free(limit); +# endif + #endif } -- 2.20.1