diff --git a/ReactCommon/react/renderer/components/view/ViewEventEmitter.cpp b/ReactCommon/react/renderer/components/view/ViewEventEmitter.cpp index e26f7c143a6..a81f85af595 100644 --- a/ReactCommon/react/renderer/components/view/ViewEventEmitter.cpp +++ b/ReactCommon/react/renderer/components/view/ViewEventEmitter.cpp @@ -46,17 +46,17 @@ void ViewEventEmitter::onLayout(const LayoutMetrics &layoutMetrics) const { lastLayoutMetrics_ = layoutMetrics; } - std::atomic_uint_fast8_t *eventCounter = &eventCounter_; - uint_fast8_t expectedEventCount = ++*eventCounter; + auto expectedEventCount = ++*eventCounter_; // dispatchUniqueEvent only drops consecutive onLayout events to the same // node. We want to drop *any* unprocessed onLayout events when there's a // newer one. dispatchEvent( "layout", - [frame = layoutMetrics.frame, expectedEventCount, eventCounter]( - jsi::Runtime &runtime) { - uint_fast8_t actualEventCount = eventCounter->load(); + [frame = layoutMetrics.frame, + expectedEventCount, + eventCounter = eventCounter_](jsi::Runtime &runtime) { + auto actualEventCount = eventCounter->load(); if (expectedEventCount != actualEventCount) { // Drop stale events return jsi::Value::null(); diff --git a/ReactCommon/react/renderer/components/view/ViewEventEmitter.h b/ReactCommon/react/renderer/components/view/ViewEventEmitter.h index 237c9a53b10..c00802431a1 100644 --- a/ReactCommon/react/renderer/components/view/ViewEventEmitter.h +++ b/ReactCommon/react/renderer/components/view/ViewEventEmitter.h @@ -40,7 +40,9 @@ class ViewEventEmitter : public TouchEventEmitter { private: mutable std::mutex layoutMetricsMutex_; mutable LayoutMetrics lastLayoutMetrics_; - mutable std::atomic_uint_fast8_t eventCounter_{0}; + + mutable std::shared_ptr eventCounter_{ + std::make_shared(0)}; }; } // namespace react