signal 6 (SIGABRT), code -1 (SI_QUEUE) when trying to destruct leveldb::Iterator
- Dominant language
- C++
- Stars
- 39.4k
- Forks
- 8.2k
- PR merge metrics
- No merged PRs in 30d
Description
I am using leveldb in one [Android project](https://github.com/TGX-Android/leveldb). Here's the file that is used to build `leveldb`: [CMakeLists.txt](https://github.com/TGX-Android/leveldb/blob/main/jni/CMakeLists.txt).
Recently I've upgraded from [c5d5174](https://github.com/google/leveldb/tree/c5d5174a66f02e66d8e30c21ff4761214d8e4d6d) commit to [d019e36](https://github.com/google/leveldb/tree/d019e3605f222ebc5a3a2484a2cb29db537551dd) ([list of changes](https://github.com/google/leveldb/compare/c5d5174...d019e36)) and started receiving a lot of crashes from users during destruction of newly created `leveldb::Iterator` at [db_jni.cpp:465](https://github.com/TGX-Android/leveldb/blob/90be80e80baf31b3521a0749b7fca3bf7102ae77/jni/db_jni.cpp#L465).
Here's the crash log:
```
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> org.thunderdog.challegram <<<
backtrace:
#00 pc 0000000000089cd0 /apex/com.android.runtime/lib64/bionic/libc.so (abort+164)
#00 pc 00000000000ecff4 /apex/com.android.runtime/lib64/bionic/libc.so (__fortify_fatal(char const*, ...)+124)
#00 pc 00000000000ec4d0 /apex/com.android.runtime/lib64/bionic/libc.so (HandleUsingDestroyedMutex(pthread_mutex_t*, char const*)+52)
#00 pc 00000000000ec318 /apex/com.android.runtime/lib64/bionic/libc.so (pthread_mutex_lock+172)
#00 pc 00000000000bf148 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libc++_shared.so (std::__ndk1::__libcpp_mutex_lock(pthread_mutex_t*)) (SourceCode: /buildbot/src/android/ndk-release-r22/toolchain/llvm-project/libcxx/include/__threading_support:367)
#00 pc 00000000000bf148 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libc++_shared.so (std::__ndk1::mutex::lock()) (SourceCode: /buildbot/src/android/ndk-release-r22/toolchain/llvm-project/libcxx/src/mutex.cpp:33)
#00 pc 000000000002e51c /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::port::Mutex::Lock()) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/./port/port_stdcxx.h:55)
#00 pc 000000000002e51c /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::(anonymous namespace)::CleanupIteratorState(void*, void*)) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/db/db_impl.cc:1067)
#00 pc 0000000000040734 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::Iterator::CleanupNode::Run()) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/include/leveldb/iterator.h:92)
#00 pc 0000000000040734 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::Iterator::~Iterator()) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/table/iterator.cc:16)
#00 pc 0000000000040c48 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::(anonymous namespace)::MergingIterator::~MergingIterator()) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/table/merger.cc:27)
#00 pc 0000000000040c48 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::(anonymous namespace)::MergingIterator::~MergingIterator()) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/table/merger.cc:27)
#00 pc 0000000000031588 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::(anonymous namespace)::DBIter::~DBIter()) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/db/db_iter.cc:62)
#00 pc 0000000000031588 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (leveldb::(anonymous namespace)::DBIter::~DBIter()) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/leveldb/db/db_iter.cc:62)
#00 pc 0000000000018784 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/lib/arm64/libleveldbjni.so (Java_me_vkryl_leveldb_NativeBridge_dbRemoveByPrefix) (SourceCode: /home/vk/tgx/vkryl/leveldb/jni/db_jni.cpp:465)
#00 pc 000000000010b62c /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (art_jni_trampoline+188)
#00 pc 00000000001db6c0 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (me.vkryl.leveldb.LevelDB.N+176)
#00 pc 00000000003205a0 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (de.i.H3+64)
#00 pc 0000000000457550 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (vd.w6.e0+432)
#00 pc 0000000000463e44 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (vd.ya.h2+260)
#00 pc 0000000000134564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
#00 pc 00000000001a9a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
#00 pc 000000000032129c /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376)
#00 pc 0000000000318688 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+696)
#00 pc 000000000068d568 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualQuickRange+540)
#00 pc 0000000000132614 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range_quick+20)
#00 pc 00000000008dbc62 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.vdex (vd.o6.od+704)
#00 pc 000000000068cfbc /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualQuick+1344)
#00 pc 0000000000132594 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_quick+20)
#00 pc 00000000008d9f48 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.vdex (vd.o6.Na+188)
#00 pc 000000000030ebc4 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16619280533006879875)+268)
#00 pc 0000000000674d5c /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+780)
#00 pc 000000000013dff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88)
#00 pc 00000000020056e8 /memfd:jit-cache (vd.o6$k.C2+376)
#00 pc 00000000001f10c8 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (org.drinkless.td.libcore.telegram.Client.h+424)
#00 pc 00000000001f1488 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (org.drinkless.td.libcore.telegram.Client.m+792)
#00 pc 00000000001f1638 /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (org.drinkless.td.libcore.telegram.Client.n+200)
#00 pc 00000000001f1aac /data/app/~~N47gOJXH6paC65XKJsi3BQ==/org.thunderdog.challegram-SVyPef6hxGLByIO5iDtrVg==/oat/arm64/base.odex (org.drinkless.td.libcore.telegram.Client.run+60)
#00 pc 000000000015ce98 /apex/com.android.art/javalib/arm64/boot.oat (java.lang.Thread.run+72)
#00 pc 0000000000134564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
#00 pc 00000000001a9a78 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
#00 pc 000000000055e278 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+460)
#00 pc 00000000005ada3c /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1308)
#00 pc 00000000000eb7a8 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
#00 pc 000000000008bc8c /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
```
I haven't yet found the exact change that affected the growth in `signal 6 (SIGABRT), code -1 (SI_QUEUE)` received from users and haven't found a proper way to reproduce the issue (as it seems that it requires `leveldb` to be in a certain state), but it seemed to me to be worthy reporting the finding here, at least if someone else will experience the same issue.
Contributor guide
Assessment
This issue has not been assessed yet.