diff --git a/yoga/event/event.cpp b/yoga/event/event.cpp index 167912a9..e2fe3588 100644 --- a/yoga/event/event.cpp +++ b/yoga/event/event.cpp @@ -34,11 +34,19 @@ void Event::reset() { void Event::subscribe(std::function&& subscriber) { std::lock_guard guard(eventSubscribersMutex()); + eventSubscribers() = + std::make_shared(*eventSubscribers()); eventSubscribers()->push_back(subscriber); } void Event::publish(const YGNode& node, Type eventType, const Data& eventData) { - for (auto& subscriber : *eventSubscribers()) { + std::shared_ptr subscribers; + { + std::lock_guard guard(eventSubscribersMutex()); + subscribers = eventSubscribers(); + } + + for (auto& subscriber : *subscribers) { if (subscriber) { subscriber(node, eventType, eventData); }