From 0d558245cea3870caf25a34bec7acca2ce66a4d7 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Fri, 24 Jul 2026 14:22:28 +0300 Subject: [PATCH] chatgui: move SoundManager shutdown to ~MainWindow before node cleanup - SoundManager::shutdown() called explicitly in ~MainWindow (not static destruction) - Before ma_engine_uninit: DEBUG_INFO diagnostic in timestamped log - After ma_engine_uninit: DEBUG_INFO diagnostic - Double-call safe: static destructor hits m_initialized=false, returns immediately --- tools/chatgui/src/mainwindow.cpp | 1 + tools/chatgui/src/sound_manager.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/chatgui/src/mainwindow.cpp b/tools/chatgui/src/mainwindow.cpp index be215956..1982d2f0 100644 --- a/tools/chatgui/src/mainwindow.cpp +++ b/tools/chatgui/src/mainwindow.cpp @@ -84,6 +84,7 @@ MainWindow::MainWindow(QWidget *parent, DbManager* db, const QString& cfgPath, } MainWindow::~MainWindow() { + SoundManager::instance()->shutdown(); DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "MainWindow: ~MainWindow — saving channel state"); if (m_messageList) m_messageList->saveChannelState(); DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "MainWindow: ~MainWindow — stopping utun node"); diff --git a/tools/chatgui/src/sound_manager.cpp b/tools/chatgui/src/sound_manager.cpp index da477ab6..46603c69 100644 --- a/tools/chatgui/src/sound_manager.cpp +++ b/tools/chatgui/src/sound_manager.cpp @@ -3,6 +3,7 @@ #include "sound_manager.h" #include #include +#include "../../lib/debug_config.h" SoundManager* SoundManager::instance() { static SoundManager s; @@ -36,9 +37,10 @@ void SoundManager::shutdown() { } m_sounds.clear(); + DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "SoundManager: before ma_engine_uninit engine=%p", (void*)m_engine); if (m_engine) { ma_engine_uninit(m_engine); delete m_engine; m_engine = nullptr; } + DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "SoundManager: after ma_engine_uninit"); m_initialized = false; - qDebug("SoundManager: shutdown"); } void SoundManager::setEnabled(bool enabled) { m_enabled = enabled; }