From 988bf162a0f36d9919cebbebc1fca27b58be4ae5 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 10 Jun 2024 13:39:27 -0700 Subject: [PATCH] Tentative fix for NPE `JavaTimerManager$IdleCallbackRunnable.cancel` (#44852) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/44852 This attempts to fix #44842 by capturing the accessed field in a new variable. We don't have a way to reproduce this & this is a best guess fix. Changelog: [Android] [Fixed] - Tentative fix for NPE `JavaTimerManager$IdleCallbackRunnable.cancel` Reviewed By: javache Differential Revision: D58356826 fbshipit-source-id: d016df9a52f81a8d645a0a100c6bc6111841e24e --- .../com/facebook/react/modules/core/JavaTimerManager.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java index 5f5e1abb8f6..be017cdd714 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java @@ -99,8 +99,11 @@ public class JavaTimerManager { } // If the JS thread is busy for multiple frames we cancel any other pending runnable. - if (mCurrentIdleCallbackRunnable != null) { - mCurrentIdleCallbackRunnable.cancel(); + // We also capture the idleCallbackRunnable to tentatively fix: + // https://github.com/facebook/react-native/issues/44842 + IdleCallbackRunnable idleCallbackRunnable = mCurrentIdleCallbackRunnable; + if (idleCallbackRunnable != null) { + idleCallbackRunnable.cancel(); } mCurrentIdleCallbackRunnable = new IdleCallbackRunnable(frameTimeNanos);