From 44b60862c97e5ec855d2bacd4d15f81f7ae7f410 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 15 Mar 2018 15:33:54 +0300 Subject: MUCH more effective way of removing records from iterators --- src/mir_core/src/threads.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/mir_core') diff --git a/src/mir_core/src/threads.cpp b/src/mir_core/src/threads.cpp index 87a03fc62f..5be6150a91 100644 --- a/src/mir_core/src/threads.cpp +++ b/src/mir_core/src/threads.cpp @@ -228,14 +228,15 @@ MIR_CORE_DLL(void) KillObjectThreads(void* owner) if (WaitForMultipleObjects(threadCount, threadPool, TRUE, 5000) == WAIT_TIMEOUT) { // forcibly kill all remaining threads after 5 secs mir_cslock lck(csThreads); - for (auto &it : threads.rev_iter()) { + auto T = threads.rev_iter(); + for (auto &it : T) { if (it->pObject == owner) { char szModuleName[MAX_PATH]; GetModuleFileNameA(it->hOwner, szModuleName, sizeof(szModuleName)); Netlib_Logf(nullptr, "Killing object thread %s:%p", szModuleName, it->dwThreadId); TerminateThread(it->hThread, 9999); CloseHandle(it->hThread); - threads.remove(it); + threads.remove(T.indexOf(&it)); mir_free(it); } } -- cgit v1.2.3