1.把 m_bufGlass 的释放提前到 CMaster::term(),确保在 m_glassPool.term() 之前完成,避免析构时再触碰已被回收的 Glass。析构里仍保留原逻辑,若 term() 已清空则不会重复释放。
已修改1个文件
14 ■■■■ 文件已修改
SourceCode/Bond/Servo/CMaster.cpp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp
@@ -119,13 +119,6 @@
            m_hEventDispatchThreadExit[1] = nullptr;
        }
        // 释放人工搬出缓冲区里的玻璃
        for (auto* pGlass : m_bufGlass) {
            if (pGlass != nullptr) {
                pGlass->release();
            }
        }
        m_bufGlass.clear();
        DeleteCriticalSection(&m_criticalSection);
    }
@@ -344,6 +337,13 @@
        }
        m_listEquipment.clear();
        // release manual-remove buffer before glass pool is torn down
        for (auto* pGlass : m_bufGlass) {
            if (pGlass != nullptr) {
                pGlass->release();
            }
        }
        m_bufGlass.clear();
        if (m_pCollector != nullptr) {
            m_pCollector->stopLoop();