software-mansion / software-mansion/react-native-reanimated

Production Crashes on Android - java.lang.NullPointerException.

Open
#8,985 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Missing info Missing repro Platform: Android
Dominant language
TypeScript
Stars
11k
Forks
1.5k
Avg merge
3d 4h
Merged PRs (30d)
172

Description

Description

Hey,

Got this error in android devices.
Reproduced in ~10% of my clients during race condition.

com.facebook.react.common.JavascriptException: Error: Exception in HostFunction: java.lang.NullPointerException
	at java.util.Objects.throwNullPointerException(Objects.java:524)
	at java.util.Objects.requireNonNull(Objects.java:235)
	at com.swmansion.reanimated.NodesManager.<init>(NodesManager.java:231)
	at com.swmansion.reanimated.ReanimatedModule.getNodesManager(ReanimatedModule.java:144)
	at com.swmansion.reanimated.ReanimatedModule.installTurboModule(ReanimatedModule.java:159)
	at com.facebook.jni.NativeRunnable.run(Native Method)
	at android.os.Handler.handleCallback(Handler.java:942)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
	at android.os.Looper.loopOnce(Looper.java:209)
	at android.os.Looper.loop(Looper.java:296)
	at com.facebook.react.bridge.queue.MessageQueueThreadImpl.lambda$startNewBackgroundThread$2(MessageQueueThreadImpl.java:217)
	at com.facebook.react.bridge.queue.MessageQueueThreadImpl.$r8$lambda$A-xptrrouKKkxROXrYr0wU31v4c(MessageQueueThreadImpl.java:0)
	at com.facebook.react.bridge.queue.MessageQueueThreadImpl$$ExternalSyntheticLambda1.run(R8$$SyntheticClass:0)
	at java.lang.Thread.run(Thread.java:1564)
, js engine: hermes, stack:
callNativeSyncHook@1:273229
nonPromiseMethodWrapper@1:288802
NativeReanimatedModule@1:2376319
createNativeReanimatedModule@1:2375642
anonymous@1:2369488
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
get@1:2369384
anonymous@1:2367543
anonymous@1:2366622
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:2406353
anonymous@1:2405359
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:2342833
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5244791
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5203731
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5201511
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5125718
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:5096008
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:4975869
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:4972390
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:4965026
loadModuleImplementation@1:260658
guardedLoadModule@1:260181
metroRequire@1:259811
anonymous@1:267098
loadModuleImplementation@1:260658
guardedLoadModule@1:260138
metroRequire@1:259811
global@1:259339

        at com.facebook.react.modules.core.ExceptionsManagerModule.reportException(ExceptionsManagerModule.kt:52)
        at java.lang.reflect.Method.invoke(Method.java:-2)
        at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
        at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:146)
        at com.facebook.jni.NativeRunnable.run(NativeRunnable.java:-2)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
        at android.os.Looper.loopOnce(Looper.java:209)
        at android.os.Looper.loop(Looper.java:296)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl.lambda$startNewBackgroundThread$2(MessageQueueThreadImpl.java:217)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl.$r8$lambda$A-xptrrouKKkxROXrYr0wU31v4c(MessageQueueThreadImpl.java)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$$ExternalSyntheticLambda1.run(MessageQueueThreadImpl)
        at java.lang.Thread.run(Thread.java:1564)
Steps to reproduce

Failed to reproduce constantly cause it is a race with UI Thread.

But I have ~10% reproduction trend of my production version

Snack or a link to a repository

.

Reanimated version

3.18.2

Worklets version

no

React Native version

0.77.3

Platforms

Android

JavaScript runtime

None

Workflow

None

Architecture

None

Reanimated feature flags

None

React Native release level

None

Build type

No response

Device

Real device

Host machine

None

Device model

No response

Acknowledgements

Yes

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at NodesManager.java:231 and follow the initialization path through ReanimatedModule.java:144 and :159. Investigate the reported Android race involving the UI thread and validate changes on a real device under the React Native 0.77.3 and Reanimated 3.18.2 setup; done means the intermittent NullPointerException no longer occurs.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java, react-native, typescript
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.