diff --git a/include/icsneo/api/eventmanager.h b/include/icsneo/api/eventmanager.h index b035a44..ebf9cef 100644 --- a/include/icsneo/api/eventmanager.h +++ b/include/icsneo/api/eventmanager.h @@ -52,17 +52,21 @@ public: auto i = downgradedThreads.find(std::this_thread::get_id()); if(i != downgradedThreads.end() && i->second) { event.downgradeFromError(); - runCallbacks(event); - std::lock_guard lk(eventsMutex); + std::unique_lock eventsLock(eventsMutex); add_internal_event(event); + // free the lock so that callbacks may modify events + eventsLock.unlock(); + runCallbacks(event); } else { std::lock_guard lk(errorsMutex); add_internal_error(event); } } else { - runCallbacks(event); - std::lock_guard lk(eventsMutex); + std::unique_lock eventsLock(eventsMutex); add_internal_event(event); + // free the lock so that callbacks may modify events + eventsLock.unlock(); + runCallbacks(event); } } void add(APIEvent::Type type, APIEvent::Severity severity, const Device* forDevice = nullptr) {