From 499382e0781e12dca7e02f632869fd4d7948d954 Mon Sep 17 00:00:00 2001 From: xiepengfei Date: Wed, 9 Sep 2026 16:22:22 +0800 Subject: [PATCH] fix(test): connect sheet destroyed signal to prevent singleton segfault UT_onTaskFinished and UT_addgetDocImageTask registered DocSheet pointers with the ReaderImageThreadPoolManager singleton but did not connect the sheet's destroyed() signal to onDocProxyDestroyed for cleanup, unlike UT_setImageForDocSheet which already had this connection. When the tests deleted their DocSheet objects, dangling pointers remained in the singleton's internal map. At program exit the singleton destructor accessed these dangling pointers, causing a segmentation fault (exit 255). Add the missing QObject::connect(sheet, &QObject::destroyed, m_tester, &ReaderImageThreadPoolManager::onDocProxyDestroyed) to both tests so the singleton properly cleans up when the sheet is destroyed. --- tests/sidebar/ut_readerimagethreadpoolmanager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/sidebar/ut_readerimagethreadpoolmanager.cpp b/tests/sidebar/ut_readerimagethreadpoolmanager.cpp index 7ad48b34a..4c4ce58b7 100644 --- a/tests/sidebar/ut_readerimagethreadpoolmanager.cpp +++ b/tests/sidebar/ut_readerimagethreadpoolmanager.cpp @@ -169,6 +169,8 @@ TEST_F(UT_ReaderImageThreadPoolManager, UT_onTaskFinished) param.receiver = new QObject(); param.slotFun = "dummySlot"; + QObject::connect(sheet, &QObject::destroyed, m_tester, &ReaderImageThreadPoolManager::onDocProxyDestroyed); + QImage img(10, 10, QImage::Format_ARGB32); m_tester->onTaskFinished(param, img); @@ -193,6 +195,8 @@ TEST_F(UT_ReaderImageThreadPoolManager, UT_addgetDocImageTask) param.receiver = receiver; param.slotFun = "dummySlot"; + QObject::connect(sheet, &QObject::destroyed, m_tester, &ReaderImageThreadPoolManager::onDocProxyDestroyed); + m_tester->addgetDocImageTask(param); // Calling again with same params should be skipped (duplicate)