fix: 修复启动任务栏引起AM崩溃的问题

将迭代器检查修改为列表检查‘
’
Log:
Influence: 重启任务栏,观察AM服务是否会崩溃
Task: https://pms.uniontech.com/task-view-226125.html
Change-Id: I1e53235c9df552fc345170ce19134c90362d0cf7
This commit is contained in:
donghualin 2022-12-20 13:19:54 +08:00
parent 12d08de069
commit 7b22381002

View File

@ -614,8 +614,9 @@ void Entry::newInstance(uint32_t timestamp)
// 检查应用窗口分离、合并状态 // 检查应用窗口分离、合并状态
void Entry::check() void Entry::check()
{ {
for (auto iter = m_windowInfoMap.begin(); iter != m_windowInfoMap.end(); iter++) { QList<WindowInfoBase *> windows = m_windowInfoMap.values();
m_dock->attachOrDetachWindow(iter.value()); for (WindowInfoBase *window : windows) {
m_dock->attachOrDetachWindow(window);
} }
} }
@ -623,12 +624,13 @@ void Entry::check()
void Entry::forceQuit() void Entry::forceQuit()
{ {
QMap<int, QVector<WindowInfoBase*>> pidWinInfoMap; QMap<int, QVector<WindowInfoBase*>> pidWinInfoMap;
for (auto iter = m_windowInfoMap.begin(); iter != m_windowInfoMap.end(); iter++) { QList<WindowInfoBase *> windows = m_windowInfoMap.values();
int pid = iter.value()->getPid(); for (WindowInfoBase *window : windows) {
int pid = window->getPid();
if (pid != 0) { if (pid != 0) {
pidWinInfoMap[pid].push_back(iter.value()); pidWinInfoMap[pid].push_back(window);
} else { } else {
iter.value()->killClient(); window->killClient();
} }
} }
@ -648,11 +650,7 @@ void Entry::forceQuit()
void Entry::presentWindows() void Entry::presentWindows()
{ {
QList<uint> windows; QList<uint> windows = m_windowInfoMap.keys();
for (auto iter = m_windowInfoMap.begin(); iter != m_windowInfoMap.end(); iter++) {
windows.push_back(iter.key());
}
m_dock->presentWindows(windows); m_dock->presentWindows(windows);
} }