google / google/leveldb

signal 6 (SIGABRT), code -1 (SI_QUEUE) when trying to destruct leveldb::Iterator

Open
#1,017 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.