diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 29b6493e..167912a9 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -7,6 +7,7 @@ #include "event.h" #include #include +#include #include @@ -15,23 +16,29 @@ namespace yoga { namespace { -Event::Subscribers& eventSubscribers() { - static Event::Subscribers subscribers = {}; +std::mutex& eventSubscribersMutex() { + static std::mutex subscribersMutex; + return subscribersMutex; +} + +std::shared_ptr& eventSubscribers() { + static auto subscribers = std::make_shared(); return subscribers; } } // namespace void Event::reset() { - eventSubscribers() = {}; + eventSubscribers() = std::make_shared(); } void Event::subscribe(std::function&& subscriber) { - eventSubscribers().push_back(subscriber); + std::lock_guard guard(eventSubscribersMutex()); + eventSubscribers()->push_back(subscriber); } void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { - for (auto& subscriber : eventSubscribers()) { + for (auto& subscriber : *eventSubscribers()) { if (subscriber) { subscriber(node, eventType, eventData); }