From fb241dc5cd55f61180a11c7c772f772c68796b7a Mon Sep 17 00:00:00 2001 From: Max Brombach Date: Fri, 2 Oct 2026 19:38:59 +0000 Subject: [PATCH] EventManager: Fix potential ABBA deadlock if callback contains locks --- api/icsneocpp/eventmanager.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/api/icsneocpp/eventmanager.cpp b/api/icsneocpp/eventmanager.cpp index 174b3fbd..9e1b6ca7 100644 --- a/api/icsneocpp/eventmanager.cpp +++ b/api/icsneocpp/eventmanager.cpp @@ -99,9 +99,13 @@ void EventManager::addEventInternal(APIEvent event) { } void EventManager::runCallbacks(APIEvent event) { - std::lock_guard lk(callbacksMutex); - for(auto& i : callbacks) - i.second.callIfMatch(std::make_shared(event)); + std::map tempCallbacks; + { + std::lock_guard lk(callbacksMutex); + tempCallbacks = callbacks; + } + for(auto& i : tempCallbacks) + i.second.callIfMatch(std::make_shared(event)); } void EventManager::setEventLimit(size_t newLimit) {