From a4263b73e67c90b4cbb556e02ca05d38900ac769 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Thu, 28 Aug 2025 16:01:53 +0200 Subject: [PATCH] fix(logger): brings back crash dump on fatal log output originally using qFatal or qCFatal should have written a crash dump log file bring it back and ensure the crash would happen via the default Qt log message handler Signed-off-by: Matthieu Gallien --- src/libsync/logger.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libsync/logger.cpp b/src/libsync/logger.cpp index e07a27ea71..d978344128 100644 --- a/src/libsync/logger.cpp +++ b/src/libsync/logger.cpp @@ -31,6 +31,8 @@ constexpr int CrashLogSize = 20; constexpr auto MaxLogLinesCount = 50000; constexpr auto MaxLogLinesBeforeFlush = 10; +static QtMessageHandler s_originalMessageHandler = nullptr; + static bool compressLog(const QString &originalName, const QString &targetName) { #ifdef ZLIB_FOUND @@ -76,7 +78,7 @@ Logger::Logger(QObject *parent) "]%{if-debug}\t[ %{function} ]%{endif}:\t%{message}")); _crashLog.resize(CrashLogSize); #ifndef NO_MSG_HANDLER - qInstallMessageHandler([](QtMsgType type, const QMessageLogContext &ctx, const QString &message) { + s_originalMessageHandler = qInstallMessageHandler([](QtMsgType type, const QMessageLogContext &ctx, const QString &message) { Logger::instance()->doLog(type, ctx, message); }); #endif @@ -159,7 +161,9 @@ void Logger::doLog(QtMsgType type, const QMessageLogContext &ctx, const QString } } if (type == QtFatalMsg) { + dumpCrashLog(); closeNoLock(); + s_originalMessageHandler(type, ctx, message); #if defined(Q_OS_WIN) // Make application terminate in a way that can be caught by the crash reporter Utility::crash(); @@ -171,7 +175,6 @@ void Logger::doLog(QtMsgType type, const QMessageLogContext &ctx, const QString void Logger::closeNoLock() { - dumpCrashLog(); if (_logstream) { _logstream->flush();