realm-java icon indicating copy to clipboard operation
realm-java copied to clipboard

RealmList size() crashes occurring for many users since version 10.9.0

Open qonto-android-team opened this issue 3 years ago • 8 comments

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: ...

qonto-android-team avatar Jan 04 '22 14:01 qonto-android-team

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

clementetb avatar Jan 05 '22 16:01 clementetb

Hello @clementetb ! We updated the description by adding the backtrace, does it help ?

qonto-android-team avatar Jan 05 '22 17:01 qonto-android-team

@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)?

rorbech avatar Jan 06 '22 08:01 rorbech

Yes indeed, we are using the Local Database only. My bad.

qonto-android-team avatar Jan 06 '22 09:01 qonto-android-team

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)

rorbech avatar Jan 06 '22 09:01 rorbech

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?

jedelbo avatar Jan 06 '22 17:01 jedelbo

@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

rorbech avatar Jan 07 '22 07:01 rorbech

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

qonto-android-team avatar Jan 07 '22 12:01 qonto-android-team