Skip to content

Commit 37c8771

Browse files
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
1 parent 44659d2 commit 37c8771

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

ReactCommon/yoga/yoga/event/event.cpp

+12-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "event.h"
88
#include <memory>
99
#include <stdexcept>
10+
#include <mutex>
1011

1112
#include <iostream>
1213

@@ -15,23 +16,29 @@ namespace yoga {
1516

1617
namespace {
1718

18-
Event::Subscribers& eventSubscribers() {
19-
static Event::Subscribers subscribers = {};
19+
std::mutex& eventSubscribersMutex() {
20+
static std::mutex subscribersMutex;
21+
return subscribersMutex;
22+
}
23+
24+
std::shared_ptr<Event::Subscribers>& eventSubscribers() {
25+
static auto subscribers = std::make_shared<Event::Subscribers>();
2026
return subscribers;
2127
}
2228

2329
} // namespace
2430

2531
void Event::reset() {
26-
eventSubscribers() = {};
32+
eventSubscribers() = std::make_shared<Event::Subscribers>();
2733
}
2834

2935
void Event::subscribe(std::function<Subscriber>&& subscriber) {
30-
eventSubscribers().push_back(subscriber);
36+
std::lock_guard<std::mutex> guard(eventSubscribersMutex());
37+
eventSubscribers()->push_back(subscriber);
3138
}
3239

3340
void Event::publish(const YGNode& node, Type eventType, const Data& eventData) {
34-
for (auto& subscriber : eventSubscribers()) {
41+
for (auto& subscriber : *eventSubscribers()) {
3542
if (subscriber) {
3643
subscriber(node, eventType, eventData);
3744
}

0 commit comments

Comments
 (0)