software-mansion / react-native-screens

Native navigation primitives for your React Native app.
MIT License
3.01k stars 510 forks source link

Crash: SIGABRT in findHeaderHeight #2286

Closed janicduplessis closed 1 month ago

janicduplessis commented 1 month ago

Description

I am getting the following crash currently in production. Sadly I do not have a way to repro it.

OS Version: Android 14 (AP1A.240305.019.A1)
Report Version: 104

Exception Type: Unknown (SIGABRT)

Application Specific Information:
Abort

Thread 0 Crashed:
0   libc.so                         0x7ed5ab8e74        abort
1   libart.so                       0x7c0f371c60        art::Runtime::Abort
2   libbase.so                      0x7ec1cf57d0        <unknown> + 544417470416
3   libbase.so                      0x7ec1cf4d58        android::base::LogMessage::~LogMessage
4   libart.so                       0x7c0ee5ae28        art::ClassLinker::FindClass
5   libart.so                       0x7c0f154cc0        <unknown> + 532828998848
6   split_config.arm64_v8a.apk      0x7ac7f71034        [inlined] _JNIEnv::FindClass (jni.h:503)
7   split_config.arm64_v8a.apk      0x7ac7f71034        facebook::react::RNSScreenComponentDescriptor::findHeaderHeight (RNSScreenComponentDescriptor.h:133)
8   split_config.arm64_v8a.apk      0x7ac7f6f298        facebook::react::RNSScreenComponentDescriptor::adopt (RNSScreenComponentDescriptor.h:89)
9   split_config.arm64_v8a.apk      0x7ac7f6e9d0        facebook::react::ConcreteComponentDescriptor<T>::cloneShadowNode (ConcreteComponentDescriptor.h:82)
10  split_config.arm64_v8a.apk      0x7ad4094508        facebook::react::YogaLayoutableShadowNode::adoptYogaChild (YogaLayoutableShadowNode.cpp:216)
11  split_config.arm64_v8a.apk      0x7ad4093b4c        facebook::react::YogaLayoutableShadowNode::updateYogaChildren (YogaLayoutableShadowNode.cpp:354)
12  split_config.arm64_v8a.apk      0x7ad4094074        facebook::react::YogaLayoutableShadowNode::YogaLayoutableShadowNode (YogaLayoutableShadowNode.cpp:156)
13  split_config.arm64_v8a.apk      0x7ac7f6a4b0        [inlined] facebook::react::ConcreteShadowNode<T>::YogaLayoutableShadowNode (ConcreteShadowNode.h:46)
14  split_config.arm64_v8a.apk      0x7ac7f6a4b0        [inlined] facebook::react::ConcreteViewShadowNode<T>::ConcreteViewShadowNode (ConcreteViewShadowNode.h:66)
15  split_config.arm64_v8a.apk      0x7ac7f6a4b0        [inlined] std::__ndk1::construct_at[abi:v170000]<T> (construct_at.h:38)
16  split_config.arm64_v8a.apk      0x7ac7f6a4b0        [inlined] std::__ndk1::allocator_traits<T>::construct[abi:v170000]<T> (allocator_traits.h:304)
17  split_config.arm64_v8a.apk      0x7ac7f6a4b0        [inlined] std::__ndk1::__shared_ptr_emplace<T>::__shared_ptr_emplace[abi:v170000]<T> (shared_ptr.h:277)
18  split_config.arm64_v8a.apk      0x7ac7f6a4b0        [inlined] std::__ndk1::allocate_shared[abi:v170000]<T> (shared_ptr.h:948)
19  split_config.arm64_v8a.apk      0x7ac7f6a4b0        [inlined] std::__ndk1::make_shared[abi:v170000]<T> (shared_ptr.h:957)
20  split_config.arm64_v8a.apk      0x7ac7f6a4b0        facebook::react::ConcreteComponentDescriptor<T>::cloneShadowNode (ConcreteComponentDescriptor.h:80)
21  split_config.arm64_v8a.apk      0x79db2d4c38        reanimated::cloneShadowTreeWithNewProps (ShadowTreeCloner.cpp:56)
22  split_config.arm64_v8a.apk      0x79db2d427c        [inlined] reanimated::ReanimatedCommitHook::shadowTreeWillCommit::lambda::operator() (ReanimatedCommitHook.cpp:48)
23  split_config.arm64_v8a.apk      0x79db2d427c        [inlined] std::__ndk1::__invoke[abi:v170000]<T> (invoke.h:394)
24  split_config.arm64_v8a.apk      0x79db2d427c        [inlined] std::__ndk1::__invoke_void_return_wrapper<T>::__call<T> (invoke.h:487)
25  split_config.arm64_v8a.apk      0x79db2d427c        [inlined] std::__ndk1::__function::__alloc_func<T>::operator()[abi:v170000] (function.h:185)
26  split_config.arm64_v8a.apk      0x79db2d427c        std::__ndk1::__function::__func<T>::operator() (function.h:356)
27  split_config.arm64_v8a.apk      0x79db2d2810        [inlined] std::__ndk1::__function::__value_func<T>::operator()[abi:v170000] (function.h:510)
28  split_config.arm64_v8a.apk      0x79db2d2810        [inlined] std::__ndk1::function<T>::operator() (function.h:1156)
29  split_config.arm64_v8a.apk      0x79db2d2810        reanimated::PropsRegistry::for_each (PropsRegistry.cpp:31)
30  split_config.arm64_v8a.apk      0x79db2d3f8c        reanimated::ReanimatedCommitHook::shadowTreeWillCommit (ReanimatedCommitHook.cpp:45)
31  split_config.arm64_v8a.apk      0x7acfd8cc10        facebook::react::UIManager::shadowTreeWillCommit (UIManager.cpp:694)
32  split_config.arm64_v8a.apk      0x7acfd75fa8        facebook::react::ShadowTree::tryCommit (ShadowTree.cpp:414)
33  split_config.arm64_v8a.apk      0x7acfd75cbc        facebook::react::ShadowTree::commit (ShadowTree.cpp:360)
34  split_config.arm64_v8a.apk      0x7acfd8d1ec        [inlined] const::lambda::operator() (UIManager.cpp:170)
35  split_config.arm64_v8a.apk      0x7acfd8d1ec        [inlined] std::__ndk1::__invoke[abi:v170000]<T> (invoke.h:394)
36  split_config.arm64_v8a.apk      0x7acfd8d1ec        [inlined] std::__ndk1::__invoke_void_return_wrapper<T>::__call<T> (invoke.h:487)
37  split_config.arm64_v8a.apk      0x7acfd8d1ec        [inlined] std::__ndk1::__function::__alloc_func<T>::operator()[abi:v170000] (function.h:185)
38  split_config.arm64_v8a.apk      0x7acfd8d1ec        std::__ndk1::__function::__func<T>::operator() (function.h:356)
39  split_config.arm64_v8a.apk      0x7acfd74578        [inlined] std::__ndk1::__function::__value_func<T>::operator()[abi:v170000] (function.h:510)
40  split_config.arm64_v8a.apk      0x7acfd74578        [inlined] std::__ndk1::function<T>::operator() (function.h:1156)
41  split_config.arm64_v8a.apk      0x7acfd74578        facebook::react::ShadowTreeRegistry::visit (ShadowTreeRegistry.cpp:50)
42  split_config.arm64_v8a.apk      0x7acfd8a904        facebook::react::UIManager::completeSurface (UIManager.cpp:169)
43  split_config.arm64_v8a.apk      0x7acfd9a310        [inlined] facebook::react::UIManagerBinding::get::lambda::operator() (UIManagerBinding.cpp:506)
44  split_config.arm64_v8a.apk      0x7acfd9a310        [inlined] std::__ndk1::__invoke[abi:v170000]<T> (invoke.h:394)
45  split_config.arm64_v8a.apk      0x7acfd9a310        [inlined] std::__ndk1::__invoke_void_return_wrapper<T>::__call<T> (invoke.h:478)
46  split_config.arm64_v8a.apk      0x7acfd9a310        [inlined] std::__ndk1::__function::__alloc_func<T>::operator()[abi:v170000] (function.h:185)
47  split_config.arm64_v8a.apk      0x7acfd9a310        std::__ndk1::__function::__func<T>::operator() (function.h:356)
48  split_config.arm64_v8a.apk      0x7ab4a72070        facebook::jsi::Runtime::PointerValue::~PointerValue
49  split_config.arm64_v8a.apk      0x7ab4a71cd0        facebook::jsi::Runtime::PointerValue::~PointerValue
50  split_config.arm64_v8a.apk      0x7ab4a787b8        facebook::hermes::HermesRuntime::~HermesRuntime
51  split_config.arm64_v8a.apk      0x7ab4a88a40        std::__ndk1::random_device::random_device
52  split_config.arm64_v8a.apk      0x7ab4a8a3f4        std::__ndk1::random_device::random_device
53  split_config.arm64_v8a.apk      0x7ab4a89aac        std::__ndk1::random_device::random_device
54  split_config.arm64_v8a.apk      0x7ab4a788c8        facebook::hermes::HermesRuntime::~HermesRuntime
55  split_config.arm64_v8a.apk      0x7ab4a6a0ec        facebook::jsi::Array::setValueAtIndex<T>
56  split_config.arm64_v8a.apk      0x7acfd6ef00        [inlined] facebook::jsi::Function::call (jsi-inl.h:264)
57  split_config.arm64_v8a.apk      0x7acfd6ef00        [inlined] facebook::jsi::Function::call (jsi-inl.h:269)
58  split_config.arm64_v8a.apk      0x7acfd6ef00        facebook::react::Task::execute (Task.cpp:45)
59  split_config.arm64_v8a.apk      0x7acfd6d394        facebook::react::RuntimeScheduler_Modern::executeMacrotask (RuntimeScheduler_Modern.cpp:330)
60  split_config.arm64_v8a.apk      0x7acfd6d288        facebook::react::RuntimeScheduler_Modern::executeTask (RuntimeScheduler_Modern.cpp:291)
61  split_config.arm64_v8a.apk      0x7acfd6cf00        facebook::react::RuntimeScheduler_Modern::startWorkLoop (RuntimeScheduler_Modern.cpp:242)
62  split_config.arm64_v8a.apk      0x7ab8fc3110        std::__ndk1::__shared_ptr_emplace<T>::__on_zero_shared_weak
63  split_config.arm64_v8a.apk      0x7ad41932c4        facebook::react::JMessageQueueThread::~JMessageQueueThread
64  split_config.arm64_v8a.apk      0x7aeaba7804        [inlined] std::__ndk1::__function::__value_func<T>::operator()[abi:v170000] (function.h:510)
65  split_config.arm64_v8a.apk      0x7aeaba7804        [inlined] std::__ndk1::function<T>::operator() (function.h:1156)
66  split_config.arm64_v8a.apk      0x7aeaba7804        [inlined] facebook::jni::JNativeRunnable::run (NativeRunnable.h:44)
67  split_config.arm64_v8a.apk      0x7aeaba7804        facebook::jni::detail::MethodWrapper<T>::dispatch (Registration-inl.h:129)
68  split_config.arm64_v8a.apk      0x7aeaba7744        [inlined] facebook::jni::detail::CallWithJniConversions<T>::call (Registration-inl.h:66)
69  split_config.arm64_v8a.apk      0x7aeaba7744        facebook::jni::detail::FunctionWrapper<T>::call (Registration-inl.h:95)
70  base.odex                       0x7afce51194        <unknown> + 528228880788

I suspect that the code is executed on a thread that is not attached to the jvm class loader. I am currently deploying a patch that wraps that code with jni::ThreadScope::WithClassLoader to see if the crash stops.

Steps to reproduce

N/A

Snack or a link to a repository

N/A

Screens version

3.33.0

React Native version

0.74.3

Platforms

Android

JavaScript runtime

Hermes

Workflow

React Native (without Expo)

Architecture

Fabric (New Architecture)

Build type

Release mode

Device

Real device

Device model

Pixel 8 (AP1A.240305.019.A1) (Android 14)

Acknowledgements

Yes

github-actions[bot] commented 1 month 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?

alduzy commented 1 month ago

Hey @janicduplessis The 3.33.0 version of react-native-screens should be used along with RN 0.75.x (see https://github.com/software-mansion/react-native-screens#support-for-fabric). Let me know if that helps

janicduplessis commented 1 month ago

I made a patch to make it build on 0.74, but will try to update to 0.75 when possible.

I actually suspect that the issue may be caused by proguard since the class does not have @DoNotStrip annotations. I will try to add those and see if the crash stops.