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
This commit is contained in:
Samuel Susla
2021-09-21 10:24:12 -07:00
committed by Facebook GitHub Bot
parent a7ff7229f0
commit 9a308697e2
3 changed files with 6 additions and 6 deletions
@@ -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"));
@@ -11,10 +11,10 @@ namespace facebook {
namespace react {
JRuntimeScheduler::JRuntimeScheduler(
std::shared_ptr<RuntimeScheduler> const &runtimeScheduler)
std::weak_ptr<RuntimeScheduler> runtimeScheduler)
: runtimeScheduler_(runtimeScheduler) {}
std::shared_ptr<RuntimeScheduler> JRuntimeScheduler::get() {
std::weak_ptr<RuntimeScheduler> JRuntimeScheduler::get() {
return runtimeScheduler_;
}
@@ -18,12 +18,12 @@ class JRuntimeScheduler : public jni::HybridClass<JRuntimeScheduler> {
static auto constexpr kJavaDescriptor =
"Lcom/facebook/react/bridge/RuntimeScheduler;";
std::shared_ptr<RuntimeScheduler> get();
std::weak_ptr<RuntimeScheduler> get();
private:
friend HybridBase;
JRuntimeScheduler(std::shared_ptr<RuntimeScheduler> const &runtimeScheduler);
std::shared_ptr<RuntimeScheduler> runtimeScheduler_;
JRuntimeScheduler(std::weak_ptr<RuntimeScheduler> runtimeScheduler);
std::weak_ptr<RuntimeScheduler> runtimeScheduler_;
};
} // namespace react