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
This commit is contained in:
committed by
Facebook Github Bot
parent
8dc46c0a87
commit
aa71dbb5bd
@@ -34,11 +34,19 @@ void Event::reset() {
|
||||
|
||||
void Event::subscribe(std::function<Subscriber>&& subscriber) {
|
||||
std::lock_guard<std::mutex> guard(eventSubscribersMutex());
|
||||
eventSubscribers() =
|
||||
std::make_shared<Event::Subscribers>(*eventSubscribers());
|
||||
eventSubscribers()->push_back(subscriber);
|
||||
}
|
||||
|
||||
void Event::publish(const YGNode& node, Type eventType, const Data& eventData) {
|
||||
for (auto& subscriber : *eventSubscribers()) {
|
||||
std::shared_ptr<Event::Subscribers> subscribers;
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(eventSubscribersMutex());
|
||||
subscribers = eventSubscribers();
|
||||
}
|
||||
|
||||
for (auto& subscriber : *subscribers) {
|
||||
if (subscriber) {
|
||||
subscriber(node, eventType, eventData);
|
||||
}
|
||||
|
Reference in New Issue
Block a user