From 1bf86f52d368935e60780acc2d9d3c5265f6bce8 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 4 Jul 2025 15:56:11 -0500 Subject: [PATCH] Deregister logging callbacks before destroying the logger --- app/main.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/app/main.cpp b/app/main.cpp index bbef4bc3..8c1608ab 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -360,11 +360,18 @@ int main(int argc, char *argv[]) // Serialize log messages on a single thread s_LoggerThread.setMaxThreadCount(1); - s_LoggerTime.start(); - qInstallMessageHandler(qtLogToDiskHandler); - SDL_LogSetOutputFunction(sdlLogToDiskHandler, nullptr); + // Register our logger with all libraries +#if SDL_VERSION_ATLEAST(3, 0, 0) + SDL_SetLogOutputFunction(sdlLogToDiskHandler, nullptr); +#else + SDL_LogOutputFunction oldSdlLogFn; + void* oldSdlLogUserdata; + SDL_LogGetOutputFunction(&oldSdlLogFn, &oldSdlLogUserdata); + SDL_LogSetOutputFunction(sdlLogToDiskHandler, nullptr); +#endif + qInstallMessageHandler(qtLogToDiskHandler); #ifdef HAVE_FFMPEG av_log_set_callback(ffmpegLogToDiskHandler); #endif @@ -802,6 +809,17 @@ int main(int argc, char *argv[]) // sometimes freezing and blocking process exit. QThreadPool::globalInstance()->waitForDone(30000); + // Restore the default logger for all libraries before shutting down ours +#if SDL_VERSION_ATLEAST(3, 0, 0) + SDL_SetLogOutputFunction(SDL_GetDefaultLogOutputFunction(), nullptr); +#else + SDL_LogSetOutputFunction(oldSdlLogFn, oldSdlLogUserdata); +#endif + qInstallMessageHandler(nullptr); +#ifdef HAVE_FFMPEG + av_log_set_callback(av_log_default_callback); +#endif + // Wait for pending log messages to be printed s_LoggerThread.waitForDone();