A deadlock in countly?
Hello,
We are using Countly in our project, and recently we encountered an ANR in our app, after anylized the anr file, i think there is a deadlock bug in countly, could anyone please help on this?
I put the call stack treads below which have potential issues,
call stack of thread-1
#00 pc 0000000000086b4c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28) (BuildId: a790cdbd8e44ea8a90802da343cb82ce)
#01 pc 00000000001ad950 /apex/com.android.art/lib64/libart.so (art::Mutex::ExclusiveLock(art::Thread*)+440) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#02 pc 0000000000496e50 /apex/com.android.art/lib64/libart.so (void art::Monitor::Lock<(art::LockReason)1>(art::Thread*)+524) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#03 pc 000000000049d030 /apex/com.android.art/lib64/libart.so (art::Monitor::MonitorEnter(art::Thread*, art::ObjPtr<art::mirror::Object>, bool)+456) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#04 pc 000000000066c344 /apex/com.android.art/lib64/libart.so (artLockObjectFromCode+32) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#05 pc 000000000012af90 /apex/com.android.art/lib64/libart.so (mterp_op_monitor_enter+16) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#06 pc 00000000003d6df4 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.Countly.isLoggingEnabled)
#07 pc 000000000067e7f4 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#08 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#09 pc 00000000003e1a4c /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ModuleLog.logEnabled+16)
#10 pc 000000000067e7f4 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#11 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#12 pc 00000000003e1cc8 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ModuleLog.w)
#13 pc 000000000067e7f4 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#14 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#15 pc 00000000003e1cae /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ModuleLog.w+2)
#16 pc 000000000067e7f4 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#17 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#18 pc 00000000003d650a /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.CountlyStore.addConnection+118)
#19 pc 000000000067e7f4 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#20 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#21 pc 00000000003d46b8 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ConnectionQueue.sendCrashReport+188)
#22 pc 000000000067e7f4 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+1520) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#23 pc 000000000012d814 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#24 pc 00000000003d539e /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.Countly$4.uncaughtException+138)
in the call stack of thread-1, counly has below lock sequence:
ly.count.android.sdk.CountlyStore.addConnection -> lock CountlyStore
ly.count.android.sdk.Countly.isLoggingEnabled -> lock Countly
call stack of thread-2
#00 pc 0000000000086b4c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28) (BuildId: a790cdbd8e44ea8a90802da343cb82ce)
#01 pc 00000000001ad950 /apex/com.android.art/lib64/libart.so (art::Mutex::ExclusiveLock(art::Thread*)+440) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#02 pc 0000000000496e50 /apex/com.android.art/lib64/libart.so (void art::Monitor::Lock<(art::LockReason)1>(art::Thread*)+524) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#03 pc 000000000049d030 /apex/com.android.art/lib64/libart.so (art::Monitor::MonitorEnter(art::Thread*, art::ObjPtr<art::mirror::Object>, bool)+456) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#04 pc 000000000066c344 /apex/com.android.art/lib64/libart.so (artLockObjectFromCode+32) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#05 pc 000000000012af90 /apex/com.android.art/lib64/libart.so (mterp_op_monitor_enter+16) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#06 pc 00000000003d6544 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.CountlyStore.addEvent)
#07 pc 0000000000682078 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+1132) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#08 pc 000000000012db14 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#09 pc 00000000003dc308 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.EventQueue.recordEvent+88)
#10 pc 0000000000682078 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+1132) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#11 pc 000000000012db14 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#12 pc 00000000003e0128 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ModuleEvents.recordEventInternal+1112)
#13 pc 0000000000682078 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+1132) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#14 pc 000000000012db14 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#15 pc 00000000003df700 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ModuleEvents$Events.recordEvent+128)
#16 pc 0000000000682078 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+1132) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#17 pc 000000000012db14 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#18 pc 00000000003df654 /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ModuleEvents$Events.recordEvent+24)
#19 pc 0000000000682078 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+1132) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#20 pc 000000000012db14 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20) (BuildId: 4bd97125c4572d21b4e97670ee87769f)
#21 pc 00000000003df60e /data/app/~~IwrC0tiqyhVYu2IUXk6AHA==/com.bmwgroup.idnext.china.navigation-bG345unRYsgwujP7dSe-0Q==/base.apk (offset 0x4884000) (ly.count.android.sdk.ModuleEvents$Events.recordEvent+22)
in the call stack of thread-2, counly has below lock sequence:
ly.count.android.sdk.EventQueue.recordEvent -> lock Countly
ly.count.android.sdk.CountlyStore.addEvent -> lock CountlyStore
seems there is a deadlock between thread-1 and thread-2
Comments
Hey how are you doing?
To better help you, could you please inform us:
1- which SDK version you're using?
2- how often does this happen?
3- Is it the first time it happens or there are others?
4- Were you able to reproduce it?
Hi,
Thanks for quick response. We are using version "20.11.8", this is a random issue, not easy to reproduce, we have encountered it on two different devices. But when it occurs, it will make the app ANR continuously when app start, until we delete the app and re-install it.
In my post, I have found the root cause and highlighted the code which caused the deadlock, please help to check it and fix it, thank you.
in the call stack of thread-1, counly has below lock sequence:
in the call stack of thread-2, counly has below lock sequence:
Hi Hongyu,
Thank you for your patience.
Our eng team is preparing a new Android SDK release, and it should either fix or alleviate this issue. The ETA is in two weeks. (Please check the changelog once we release it; it might have some major changes)
Please sign in to leave a comment.