Closed JonnyBurger closed 3 years ago
The issue is valid!
+1
+1
Can you pinpoint which function, or at least which Component is causing this crash?
This started occurring in 2.2.0. 2.1.0 does not crash.
I'm also on an M1, but not sure if that's relevant. I opened #2128 before seeing this.
The crash reproduces easily in this Android Emulator:
This commit fixed the crash for me: https://github.com/software-mansion/react-native-reanimated/commit/3c2bf7c6037b95c1e07b07e0cb9c524a9eea9412
See https://github.com/software-mansion/react-native-reanimated/issues/2128#issuecomment-859306367
As an update. The commit above is only for 2.3.0 alpha.
However, I just tried 2.2.0 again and a similar crash occurs, but the function that crashes is obfuscated:
This is the crash on 2.2.0:
2021-06-11 09:45:07.455 27693-27693/x I/HermesVM: JSI rethrowing JS exception: undefined is not a function
TypeError: undefined is not a function
at _f (JavaScript:1:145)
at _f (native)
at _f (JavaScript:1:89)
at _f (native)
2021-06-11 09:45:07.796 27693-27693/x A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 27693 (x), pid 27693 (x)
One theory would be that there's a (see comment below)for..of
that made its way somewhere in 2.2.0 which results in this crash.
New findings, sorry to spam this thread.
The crash wasn't completely gone with https://github.com/software-mansion/react-native-reanimated/commit/3c2bf7c6037b95c1e07b07e0cb9c524a9eea9412 alone in our project.
There's an additional crash in both 2.2.0 and 2.3.0 (but not in 2.1.0), with this code:
const alternateTitleOpacity = useDerivedValue(
() =>
!headerHeight
? 0
: Animated.interpolate(
Math.abs(headerMeasurements?.top.value || 0),
[headerYAnimationStart, headerHeight],
[0, 1],
Animated.Extrapolate.CLAMP,
),
[headerMeasurements],
);
It appears that Animated.interpolate
suddenly became undefined
in 2.2.0+.
import Animated, {
interpolate,
useAnimatedStyle,
useDerivedValue,
} from 'react-native-reanimated';
console.log(Animated.interpolate);
in a plain React component (even outside of reanimated worklets) prints undefined
. But console.log(interpolate)
is NOT undefined.
So the fix for the code above was to call interpolate
directly, without going through Animated.interpolate
.
This is probably introduced by: https://github.com/software-mansion/react-native-reanimated/pull/1958
However, Animated.interpolate
does exist in the typescript types.
There seems to be a dubious mention in the docs here: https://github.com/software-mansion/react-native-reanimated/blob/b1fd5e31bc1cc278d5355c5c6245f9a5f7c33418/docs/versioned_docs/version-2.2.0/migration.md#1-interpolate-renamed-to-interpolatenode but interpolateNode
is not documented anywhere, and it seems to return Animated.Node<number>
which I think is a v1 construct(?). There's a good question about it here: https://github.com/software-mansion/react-native-reanimated/issues/2106
We are starting to see this crash happening since we imported useAnimatedStyle
.
Even something like this:
const swipeAnimatedStyle = useAnimatedStyle(() => ({}), []);
caused the crash.
We are using 2.3.0.alpha.2, not using M1.
// Edit: With 2.3.0.alpha.1 the crash doesn't happen
EDIT: after bumping to RC3 AND hermes 0.8.1 crash is gone. probably not related to reanimated at all and instead that https://github.com/facebook/hermes/commit/1b3a0c2612836802701c967bd43f8b9c56290637
I can confirm I experience similar issues to @hannojg 2.2.0 is fine (RN 64) but 2.3.0-alpha.2 crashes (RN 65) not sure if related to the base issue tho
@andreialecu's suggestion of using interpolated directly didn't fix it for me; however, downgrading to Reanimated 2.1.0 did.
EDIT: Nope, I was wrong; still the same problem on 2.1, just way less often. Not sure of a solution for now.
I'm having the same issue while migrating to RN 0.65.1, using reanimated 2.3.0-alpha.2, and the latest hermes. any update/ suggestion?
Actually, I think we just found it. One of the maintainers of this library commented on a different, seemingly unrelated issue this, and that actually seemed to fix it for us. Using 2.3.0alpha-02 for experimentation, think we might be able to switch back to 2.2.0 though, not sure.
removing shadowOffset
didn't help, also updating to 2.3.0alpha-03 didn't make any effect 😢
There's a small repro of this issue/crash with some instructions in this comment: https://github.com/software-mansion/react-native-reanimated/issues/2256#issuecomment-912539629
This issue looks like a problem with the nested objects inside the animation style. Similar like here: https://github.com/software-mansion/react-native-reanimated/issues/2040 and https://github.com/software-mansion/react-native-reanimated/issues/2213 We fixed it here: https://github.com/software-mansion/react-native-reanimated/pull/2257 and released it in 2.3.0-alpha.3, so I close at this moment but if you after upgrade and clearing of cache you will have this problem still, reopen this issue please 🙏
Description
A SIGABRT crash on Android, possibly with an external cause, but with Reanimated at the top of the stacktrace.
Expected behavior
Don't crash / handle external exception better
Actual behavior & steps to reproduce
On app startup, crashes with the following exception:
Stack trace
``` 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] JNI DETECTED ERROR IN APPLICATION: JNI GetObjectRefType called with pending exception java.lang.RuntimeException: Exception in HostFunction: java.lang.AssertionError: Illegal type provided 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] [native code] 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] _f 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] [native code] 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] styleUpdater 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] [native code] 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] _f 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] [native code] 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void com.swmansion.reanimated.AndroidErrorHandler.raise(java.lang.String) (AndroidErrorHandler.java:6) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void com.swmansion.reanimated.Scheduler.triggerUI() (Scheduler.java:-2) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void com.swmansion.reanimated.Scheduler.access$100(com.swmansion.reanimated.Scheduler) (Scheduler.java:9) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void com.swmansion.reanimated.Scheduler$1.run() (Scheduler.java:21) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:938) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:99) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(android.os.Message) (MessageQueueThreadHandler.java:27) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void android.os.Looper.loop() (Looper.java:246) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:8512) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:602) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1130) 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] in call to GetObjectRefType 06-03 14:03:12.612 29587 29587 F com.thorwallet: java_vm_ext.cc:578] from void com.swmansion.reanimated.Scheduler.triggerUI() 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] Runtime aborting... 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] Dumping all threads without mutator lock held 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] All threads: 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] DALVIK THREADS (41): 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] "main" prio=7 tid=1 Runnable 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] | group="" sCount=0 dsCount=0 flags=0 obj=0x734bc3d8 self=0xb40000746a77ec00 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] | sysTid=29587 nice=-4 cgrp=default sched=0/0 handle=0x746be81500 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] | state=R schedstat=( 830326651 9408222 554 ) utm=69 stm=13 core=5 HZ=100 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] | stack=0x7fd5aca000-0x7fd5acc000 stackSize=8192KB 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] | held mutexes= "abort lock" "mutator lock"(shared held) 06-03 14:03:12.714 29587 29587 F com.thorwallet: runtime.cc:677] native: #00 pc 0000000000482ffc /apex/com.android.art/lib64/libart.so (art::DumpNativeStack(std::__1::basic_ostreamSnack or minimal code example
On main branch of this app: https://github.com/THORWallet/thorwallet-react-native
Package versions
Compiling on M1 chip!
Build time: 2020-10-14 16:13:12 UTC Revision: 312ba9e0f4f8a02d01854d1ed743b79ed996dfd3
Kotlin: 1.3.72 Groovy: 2.5.12 Ant: Apache Ant(TM) version 1.10.8 compiled on May 10 2020 JVM: 16.0.1 (AdoptOpenJDK 16.0.1+9) OS: Mac OS X 11.3 x86_64