ki18n("A modern, distributed IRC client"));
aboutData.addLicense(KAboutData::License_GPL_V2);
aboutData.addLicense(KAboutData::License_GPL_V3);
- aboutData.setBugAddress("http://bugs.quassel-irc.org");
+ aboutData.setBugAddress("http://bugs.quassel-irc.org/projects/quassel-irc/issues/new");
aboutData.setOrganizationDomain(Quassel::buildInfo().organizationDomain.toUtf8());
KCmdLineArgs::init(argc, argv, &aboutData);
bool Quassel::DEBUG = false;
QString Quassel::_coreDumpFileName;
Quassel *Quassel::_instance = 0;
+bool Quassel::_handleCrashes = true;
Quassel::Quassel() {
Q_ASSERT(!_instance);
// We catch SIGTERM and SIGINT (caused by Ctrl+C) to graceful shutdown Quassel.
signal(SIGTERM, handleSignal);
signal(SIGINT, handleSignal);
-
- // 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))
-
-# 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
}
Quassel::~Quassel() {
if(_initialized)
return true; // allow multiple invocations because of MonolithicApplication
+ if (_handleCrashes) {
+ // we have crashhandler for win32 and unix (based on execinfo).
+#if defined(Q_OS_WIN32) || defined(HAVE_EXECINFO)
+# 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 /* Q_OS_WIN32 */
+ signal(SIGABRT, handleSignal);
+ signal(SIGSEGV, handleSignal);
+# ifndef Q_OS_WIN32
+ signal(SIGBUS, handleSignal);
+ }
+ free(limit);
+# endif /* Q_OS_WIN32 */
+#endif /* Q_OS_WIN32 || HAVE_EXECINFO */
+ }
+
_initialized = true;
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
inline void setRunMode(RunMode mode);
inline void setDataDirPaths(const QStringList &paths);
QStringList findDataDirPaths() const;
+ inline void disableCrashhandler();
private:
void registerMetaTypes();
static AbstractCliParser *_cliParser;
static RunMode _runMode;
static bool _initialized;
+ static bool _handleCrashes;
static QString _coreDumpFileName;
static QString _configDirPath;
Quassel::RunMode Quassel::runMode() { return _runMode; }
void Quassel::setRunMode(Quassel::RunMode mode) { _runMode = mode; }
void Quassel::setDataDirPaths(const QStringList &paths) { _dataDirPaths = paths; }
+void Quassel::disableCrashhandler() { _handleCrashes = false; }
void Quassel::setCliParser(AbstractCliParser *parser) { _cliParser = parser; }
AbstractCliParser *Quassel::cliParser() { return _cliParser; }