Skip to content

Commit fb8a7c3

Browse files
mutex lock while accessing event subscribers vector for thread safety
Summary: Using Mutex lock_guard mechanism when writing to subscribers and when accessing them in publish to make a copy Reviewed By: davidaurelio Differential Revision: D15391679 fbshipit-source-id: 16713ff28ce1762a5ca4c48c152897a92417e80b
1 parent f02feb8 commit fb8a7c3

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

ReactCommon/yoga/yoga/event/event.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,19 @@ void Event::reset() {
3434

3535
void Event::subscribe(std::function<Subscriber>&& subscriber) {
3636
std::lock_guard<std::mutex> guard(eventSubscribersMutex());
37+
eventSubscribers() =
38+
std::make_shared<Event::Subscribers>(*eventSubscribers());
3739
eventSubscribers()->push_back(subscriber);
3840
}
3941

4042
void Event::publish(const YGNode& node, Type eventType, const Data& eventData) {
41-
for (auto& subscriber : *eventSubscribers()) {
43+
std::shared_ptr<Event::Subscribers> subscribers;
44+
{
45+
std::lock_guard<std::mutex> guard(eventSubscribersMutex());
46+
subscribers = eventSubscribers();
47+
}
48+
49+
for (auto& subscriber : *subscribers) {
4250
if (subscriber) {
4351
subscriber(node, eventType, eventData);
4452
}

0 commit comments

Comments
 (0)