From 9a308697e234fb8d7995a30135d35c6377fa3ca7 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Tue, 21 Sep 2021 10:22:40 -0700 Subject: [PATCH] Do not retain RuntimeScheduler beyond Runtime's lifetime Summary: changelog: [internal] Retaining RuntimeScheduler beyond Runtime's lifetime can lead to crashes. Reviewed By: ShikaSD Differential Revision: D31084763 fbshipit-source-id: df6dd6fcf5aa224b9465ed7df1e64ad0ca964510 --- .../src/main/java/com/facebook/react/fabric/jni/Binding.cpp | 2 +- ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp | 4 ++-- ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp index 1854b9059ec..aee8446f07e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp @@ -529,7 +529,7 @@ void Binding::installFabricUIManager( auto runtimeExecutor = runtimeExecutorHolder->cthis()->get(); if (runtimeSchedulerHolder) { - auto runtimeScheduler = runtimeSchedulerHolder->cthis()->get(); + auto runtimeScheduler = runtimeSchedulerHolder->cthis()->get().lock(); if (runtimeScheduler) { runtimeScheduler->setEnableYielding(config->getBool( "react_native_new_architecture:runtimescheduler_enable_yielding_android")); diff --git a/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp b/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp index 3b059ec89c1..1176d21f31c 100644 --- a/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp +++ b/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp @@ -11,10 +11,10 @@ namespace facebook { namespace react { JRuntimeScheduler::JRuntimeScheduler( - std::shared_ptr const &runtimeScheduler) + std::weak_ptr runtimeScheduler) : runtimeScheduler_(runtimeScheduler) {} -std::shared_ptr JRuntimeScheduler::get() { +std::weak_ptr JRuntimeScheduler::get() { return runtimeScheduler_; } diff --git a/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h b/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h index fb58c7ef777..3f3f7e857d6 100644 --- a/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h +++ b/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h @@ -18,12 +18,12 @@ class JRuntimeScheduler : public jni::HybridClass { static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/RuntimeScheduler;"; - std::shared_ptr get(); + std::weak_ptr get(); private: friend HybridBase; - JRuntimeScheduler(std::shared_ptr const &runtimeScheduler); - std::shared_ptr runtimeScheduler_; + JRuntimeScheduler(std::weak_ptr runtimeScheduler); + std::weak_ptr runtimeScheduler_; }; } // namespace react