From 37c8771bc60c5341fc1e3fb487c53deb3613fa50 Mon Sep 17 00:00:00 2001 From: Sidharth Guglani Date: Wed, 15 May 2019 08:57:50 -0700 Subject: [PATCH] use shared_ptr for subscribers vector in event system Summary: using shared_ptr for vector of subscribers Further changes in commit stack support the mutiple subscribers in event system Reviewed By: davidaurelio Differential Revision: D15352512 fbshipit-source-id: fac7f4268abf9ca4277734aca2f21cd711eb7d6e --- ReactCommon/yoga/yoga/event/event.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ReactCommon/yoga/yoga/event/event.cpp b/ReactCommon/yoga/yoga/event/event.cpp index 29b6493e1da174..167912a9f6e1f5 100644 --- a/ReactCommon/yoga/yoga/event/event.cpp +++ b/ReactCommon/yoga/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); }