software-mansion / react-native-reanimated

React Native's Animated library reimplemented
https://docs.swmansion.com/react-native-reanimated/
MIT License
8.82k stars 1.29k forks source link

Android crash: java.util.ConcurrentModificationException at com.swmansion.reanimated.ReanimatedPackage.createUIManager #4808

Open muthuganesan opened 1 year ago

muthuganesan commented 1 year ago

Description

java.util.ConcurrentModificationException at java.util.ArrayList$Itr.next(ArrayList.java:860) at com.facebook.react.uimanager.UIManagerModuleConstantsHelper.createConstants(UIManagerModuleConstantsHelper.java:32) at com.facebook.react.uimanager.UIManagerModule.createConstants(UIManagerModule.java:24) at com.facebook.react.uimanager.UIManagerModule.(UIManagerModule.java:46) at com.facebook.react.uimanager.ReanimatedUIManager.(ReanimatedUIManager.java:5) at com.swmansion.reanimated.ReanimatedPackage.createUIManager(ReanimatedPackage.java:23) at com.swmansion.reanimated.ReanimatedPackage.getModule(ReanimatedPackage.java:22) at com.facebook.react.TurboReactPackage$ModuleHolderProvider.get(TurboReactPackage.java:6) at com.facebook.react.TurboReactPackage$ModuleHolderProvider.get(TurboReactPackage.java:0) at com.facebook.react.bridge.ModuleHolder.create(ModuleHolder.java:67) at com.facebook.react.bridge.ModuleHolder.getModule(ModuleHolder.java:20) at com.facebook.react.bridge.NativeModuleRegistry.getModule(NativeModuleRegistry.java:31) at com.facebook.react.bridge.CatalystInstanceImpl.getNativeModule(CatalystInstanceImpl.java:29) at com.facebook.react.bridge.CatalystInstanceImpl.getNativeModule(CatalystInstanceImpl.java:4) at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:86) at com.facebook.react.uimanager.UIManagerHelper.getUIManager(UIManagerHelper.java:1) at com.facebook.react.ReactInstanceManager.attachRootViewToInstance(ReactInstanceManager.java:20) at com.facebook.react.ReactInstanceManager.attachRootView(ReactInstanceManager.java:36) at com.facebook.react.ReactRootView.attachToReactInstanceManager(ReactRootView.java:79) at com.facebook.react.ReactRootView.onMeasure(ReactRootView.java:148) at android.view.View.measure(View.java:27720) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7352) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:27720) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7352) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:154) at android.view.View.measure(View.java:27720) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7352) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:27720) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7352) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:27720) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7352) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:27720) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7352) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:1380) at android.view.View.measure(View.java:27720) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4841) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:3426) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3732) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3116) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10885) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1301) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1309) at android.view.Choreographer.doCallbacks(Choreographer.java:923) at android.view.Choreographer.doFrame(Choreographer.java:852) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1283) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8757) at java.lang.reflect.Method.invoke(Method.java:-1) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

Steps to reproduce

Crash at app launch Caused from react-native-reanimated package as per the crash log It is reproducing in production app only We are using the version "react-native": "~0.68.5"

Note: Came across the similar crash in react-native-firebase and its's fix https://github.com/invertase/react-native-firebase/commit/2a90136cce0db6ca0f253003643f8bd856fd46a0

We may have the similar fix at com.facebook.react.uimanager.UIManagerModuleConstantsHelper.createConstants method, initialize the array list before passing to for loop.

Snack or a link to a repository

https://github.com/software-mansion/react-native-reanimated/blob/main/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java

Reanimated version

2.7.0

React Native version

0.68.5

Platforms

Android

JavaScript runtime

Hermes

Workflow

React Native (without Expo)

Architecture

Paper (Old Architecture)

Build type

Release mode

Device

Real device

Device model

Galaxy S22 Ultra, Galaxy Note20 Ultra 5G, Galaxy S21 Ultra 5G, (Android 13, Android 12, Android 9)

Acknowledgements

Yes

github-actions[bot] commented 1 year ago

Hey! 👋

The issue doesn't seem to contain a minimal reproduction.

Could you provide a snack or a link to a GitHub repository under your username that reproduces the problem?

eduduardo commented 11 months ago

Same for me: Device: SM-A525M - samsung Galaxy A52 Android: Android 13 React Native: 0.72.5

react-native-reanimated: ^3.5.4 react-native-screens: 3.25.0

java.util.ConcurrentModificationException: null
    at java.util.ArrayList$Itr.next(ArrayList.java:860)
    at com.swmansion.rnscreens.p.B(ScreenStack.kt:20)
    at com.swmansion.rnscreens.p.dispatchDraw(ScreenStack.kt:61)
    at android.view.View.updateDisplayListIfDirty(View.java:23253)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4732)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4704)
    at android.view.View.updateDisplayListIfDirty(View.java:23214)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:777)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:783)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:881)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:5647)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5330)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4486)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3116)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10885)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1301)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1309)
    at android.view.Choreographer.doCallbacks(Choreographer.java:923)
    at android.view.Choreographer.doFrame(Choreographer.java:852)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1283)
    at android.os.Handler.handleCallback(Handler.java:942)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loopOnce(Looper.java:226)
    at android.os.Looper.loop(Looper.java:313)
    at android.app.ActivityThread.main(ActivityThread.java:8757)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
trymbill commented 5 months ago

Getting the same crashes being reported on Sentry. Would love some clues as to how to prevent this.

VikOsadchyi commented 4 months ago

any updates ?

NiccoloCase commented 1 month ago

same issue