diff --git a/ReactCommon/fabric/scheduler/Scheduler.cpp b/ReactCommon/fabric/scheduler/Scheduler.cpp index e9db21ae7e7..9a402251256 100644 --- a/ReactCommon/fabric/scheduler/Scheduler.cpp +++ b/ReactCommon/fabric/scheduler/Scheduler.cpp @@ -32,6 +32,11 @@ Scheduler::Scheduler( auto uiManager = std::make_shared(); auto eventOwnerBox = std::make_shared(); + // A dummy pointer to share a control block (and life-time) with + // an actual `owner` later. + auto owner = std::make_shared(false); + eventOwnerBox->owner = owner; + auto eventPipe = [uiManager]( jsi::Runtime &runtime, const EventTarget *eventTarget, @@ -47,14 +52,15 @@ Scheduler::Scheduler( uiManager->updateState(stateUpdate); }; - eventDispatcher_ = std::make_shared( + auto eventDispatcher = std::make_unique( eventPipe, statePipe, schedulerToolbox.synchronousEventBeatFactory, schedulerToolbox.asynchronousEventBeatFactory, eventOwnerBox); - eventOwnerBox->owner = eventDispatcher_; + eventDispatcher_ = + std::shared_ptr(owner, eventDispatcher.release()); componentDescriptorRegistry_ = schedulerToolbox.componentRegistryFactory( eventDispatcher_, schedulerToolbox.contextContainer);