realm-java
realm-java copied to clipboard
RealmList size() crashes occurring for many users since version 10.9.0
How frequently does the bug occur?
Sometimes
Description
Hello,
We are facing multiple crashes since the update of the Realm Version from 10.8.1 -> 10.9.0.
So far, more than 2000 users have been affected by these crashes (~5%). But we don't have specific complaints about it, so it can be silent crashes. There is ~1.4 crash/user on average so maybe it's just happening once/per device or in really specific conditions.
All the crashes are happening in the equals() method of a RealmObject used in a recyclerview with a Diffutils. More precisely in the size() method of a RealmList contained in the RealmObject.
These crashes don't seem to be related to specific devices, we were not able to reproduce with the same devices.
Stacktrace & log output
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)
librealm-jni.so (offset 0xab0000)
Obfuscated trace :
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> eu.qonto.qonto <<<
backtrace:
#00 pc 0000000000375398 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
#00 pc 0000000000588774 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
#00 pc 00000000005885d4 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
#00 pc 0000000000586d44 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
#00 pc 000000000036ae98 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000) (Java_io_realm_internal_OsList_nativeSize+20)
#00 pc 0000000000206bf8 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (art_jni_trampoline+152)
#00 pc 0000000000387a30 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (io.realm.internal.OsList.V+48)
#00 pc 000000000038c080 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (io.realm.u0.size+192)
#00 pc 000000000037728c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (io.realm.u0$b.hasNext+156)
#00 pc 00000000002bfad8 /apex/com.android.art/javalib/arm64/boot.oat (java.util.AbstractList.equals+456)
#00 pc 00000000008171c0 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (kotlin.jvm.internal.n.e+64)
#00 pc 0000000000718b54 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (com.qonto.qonto.data.model.Transaction.equals+2196)
#00 pc 000000000092e160 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (rv.f.equals+240)
#00 pc 00000000008171c0 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (kotlin.jvm.internal.n.e+64)
#00 pc 0000000000282abc /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (dd.c.a+252)
#00 pc 00000000006f3c10 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (ip.j.d+288)
#00 pc 00000000006f3998 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (ip.j.a+104)
#00 pc 0000000000526d7c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.d$a$a.a+236)
#00 pc 0000000000423948 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.h$e.e+280)
#00 pc 000000000042338c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.h$e.<init>+268)
#00 pc 0000000000424dc0 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.h.c+1088)
#00 pc 000000000041ff0c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.d$a.run+140)
#00 pc 00000000002d0638 /apex/com.android.art/javalib/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor.runWorker+984)
#00 pc 00000000002cd650 /apex/com.android.art/javalib/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor$Worker.run+64)
#00 pc 0000000000176798 /apex/com.android.art/javalib/arm64/boot.oat (java.lang.Thread.run+72)
#00 pc 0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
#00 pc 00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
#00 pc 000000000055581c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+460)
#00 pc 00000000005a4b80 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1308)
#00 pc 00000000000da278 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
#00 pc 000000000007a448 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
Deobfuscated trace
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000) (Java_io_realm_internal_OsList_nativeSize+20)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (art_jni_trampoline+152)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (io.realm.internal.OsList.size+60)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (io.realm.RealmList$RealmItr.hasNext+304)
/system/framework/arm64/boot.oat (java.util.AbstractList.equals+424)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (kotlin.jvm.internal.Intrinsics.areEqual+64)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (com.qonto.qonto.data.model.Transaction.equals+2196)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (com.qonto.qonto.ui.transaction.list.TransactionListItem.equals+244)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (kotlin.jvm.internal.Intrinsics.areEqual+64)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (com.qonto.core.utils.diffutil.HasIdItemCallback.areContentsTheSame+252)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (com.qonto.qonto.ui.core.baselist.ListItemDiffUtils.areContentsTheSame+288)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (com.qonto.qonto.ui.core.baselist.ListItemDiffUtils.areContentsTheSame+104)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (androidx.recyclerview.widget.AsyncListDiffer$1$1.areContentsTheSame+236)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (androidx.recyclerview.widget.DiffUtil$DiffResult.findMatchingItems+280)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (androidx.recyclerview.widget.DiffUtil$DiffResult.<init>+268)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (androidx.recyclerview.widget.DiffUtil.calculateDiff+1088)
/data/app/eu.qonto.qonto-yx5M_Ko3r36ME10l4xG2CQ==/oat/arm64/base.odex (androidx.recyclerview.widget.AsyncListDiffer$1.run+144)
/system/framework/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor.runWorker+984)
/system/framework/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor$Worker.run+64)
/system/framework/arm64/boot.oat (java.lang.Thread.run+72)
/apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548)
/apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+252)
/apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
/apex/com.android.runtime/lib64/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue const*)+416)
/apex/com.android.runtime/lib64/libart.so (art::Thread::CreateCallback(void*)+1176)
/apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
/apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
Can you reproduce the bug?
Not yet
Reproduction Steps
We are unable to reproduce the crash so far, but it's impacting more than 5% of our userbase.
Version
10.9.0
What SDK flavour are you using?
Local Database
Are you using encryption?
Yes, using encryption
Platform OS and version(s)
Android - mostly v10 & 11
Build environment
Android Studio version: ... Android Build Tools version: ... Gradle version: ...
Hi, thanks for reporting the issue. We cannot unroll the stacktrace because it is missing the backtrace, are you able to get a full one, here you can find how they look like: https://developer.android.com/ndk/guides/ndk-stack
Hello @clementetb ! We updated the description by adding the backtrace, does it help ?
@qonto-android-team The unrolled stack trace looks a bit weird. It looks more reasonably if I unroll it against the "Local Database"-library symbols. Are you in fact using "MongoDB Realm" (with remote sync functionality)?
Yes indeed, we are using the Local Database only. My bad.
Thanks for clarifying.
For reference the unrolled stack trace is:
#00 0x0000000000375398 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
realm::BPlusTreeBase::init_from_parent()
/tmp/realm-java/realm/realm-library/src/main/cpp/realm-core/src/realm/bplustree.hpp:186:34
#00 0x0000000000588774 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
realm::Lst<realm::StringData>::init_from_parent(bool) const
/tmp/realm-java/realm/realm-library/src/main/cpp/realm-core/src/realm/list.hpp:239:21
#00 0x00000000005885d4 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
realm::Lst<realm::StringData>::update_if_needed() const
/tmp/realm-java/realm/realm-library/src/main/cpp/realm-core/src/realm/list.hpp:173:33
#00 0x0000000000586d44 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000)
realm::Lst<realm::StringData>::update() const
/tmp/realm-java/realm/realm-library/src/main/cpp/realm-core/src/realm/list.hpp:207:16
realm::Lst<realm::StringData>::size() const
/tmp/realm-java/realm/realm-library/src/main/cpp/realm-core/src/realm/list.hpp:557:12
#00 0x000000000036ae98 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/split_config.arm64_v8a.apk!lib/arm64-v8a/librealm-jni.so (offset 0xab0000) (Java_io_realm_internal_OsList_nativeSize+20)
Java_io_realm_internal_OsList_nativeSize
/tmp/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsList.cpp:192:37
#00 0x0000000000206bf8 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (art_jni_trampoline+152)
#00 0x0000000000387a30 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (io.realm.internal.OsList.V+48)
#00 0x000000000038c080 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (io.realm.u0.size+192)
#00 0x000000000037728c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (io.realm.u0$b.hasNext+156)
#00 0x00000000002bfad8 /apex/com.android.art/javalib/arm64/boot.oat (java.util.AbstractList.equals+456)
#00 0x00000000008171c0 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (kotlin.jvm.internal.n.e+64)
#00 0x0000000000718b54 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (com.qonto.qonto.data.model.Transaction.equals+2196)
#00 0x000000000092e160 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (rv.f.equals+240)
#00 0x00000000008171c0 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (kotlin.jvm.internal.n.e+64)
#00 0x0000000000282abc /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (dd.c.a+252)
#00 0x00000000006f3c10 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (ip.j.d+288)
#00 0x00000000006f3998 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (ip.j.a+104)
#00 0x0000000000526d7c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.d$a$a.a+236)
#00 0x0000000000423948 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.h$e.e+280)
#00 0x000000000042338c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.h$e.<init>+268)
#00 0x0000000000424dc0 /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.h.c+1088)
#00 0x000000000041ff0c /data/app/~~IM2LYE6LLUpHM_1qPg16kA==/eu.qonto.qonto-_rP1yxixX2tLoHWEx4QI4A==/oat/arm64/base.odex (androidx.recyclerview.widget.d$a.run+140)
#00 0x00000000002d0638 /apex/com.android.art/javalib/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor.runWorker+984)
#00 0x00000000002cd650 /apex/com.android.art/javalib/arm64/boot.oat (java.util.concurrent.ThreadPoolExecutor$Worker.run+64)
#00 0x0000000000176798 /apex/com.android.art/javalib/arm64/boot.oat (java.lang.Thread.run+72)
#00 0x0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
#00 0x00000000001a8a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
#00 0x000000000055581c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+460)
#00 0x00000000005a4b80 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1308)
#00 0x00000000000da278 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
#00 0x000000000007a448 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
Not a lot to work on here. @rorbech It seems like the size method on a List of strings is called directly from java. Can we find out how this object is created and in which context it is used?
@qonto-android-team Unfortunately there is not enough information in the stack trace to guide us to compile a reproduction case for this. Are you able to share some more details about this:
- Are there any chance to get a hold on a Realm exhibiting this?
- Is it a one time issue only happening when people have upgraded? And do you know if the app is operational after this happens?
- Have you tried reproducing by upgrading you app?q
Hello @rorbech !
-
Are there any chance to get a hold on a Realm exhibiting this? => It's improbable. We don't reproduce the issue and we can't identify users that have this issue, so we can't have a hand on a Realm exhibiting this sadly.
-
Is it a one time issue only happening when people have upgraded? => We think that's a one time issue, but we can't ensure it. By the way, checking the occurences vs users impacted, we have a ratio of 1.4, so it probably mean that's not only 1 time by user.
-
Have you tried reproducing by upgrading you app? => Yes and we do not reproduce