EventManager: Fix potential ABBA deadlock if callback contains locks

This commit is contained in:
Max Brombach
2026-10-02 15:38:59 -04:00
committed by Kyle Schwarz
parent 3932b54947
commit fb241dc5cd
+7 -3
View File
@@ -99,9 +99,13 @@ void EventManager::addEventInternal(APIEvent event) {
} }
void EventManager::runCallbacks(APIEvent event) { void EventManager::runCallbacks(APIEvent event) {
std::lock_guard<std::mutex> lk(callbacksMutex); std::map<int, icsneo::EventCallback> tempCallbacks;
for(auto& i : callbacks) {
i.second.callIfMatch(std::make_shared<APIEvent>(event)); std::lock_guard<std::mutex> lk(callbacksMutex);
tempCallbacks = callbacks;
}
for(auto& i : tempCallbacks)
i.second.callIfMatch(std::make_shared<APIEvent>(event));
} }
void EventManager::setEventLimit(size_t newLimit) { void EventManager::setEventLimit(size_t newLimit) {