Tencent / wcdb

WCDB is a cross-platform database framework developed by WeChat.
Other
10.78k stars 1.41k forks source link

"ThreadLocal<std::__1::array<WCDB::HandlePool::ReferencedHandle" Crashed: Thread #1153

Closed funnyJackChen closed 1 month ago

funnyJackChen commented 1 month ago

The language of WCDB

Swift

The version of WCDB

v2.1.6

The platform of WCDB

iOS

The installation of WCDB

Cocoapods

Crashed: Thread 0 WCDBSwift 0x87d40 WCDB::ThreadLocal<std::__1::array<WCDB::HandlePool::ReferencedHandle, 9ul>>::getOrCreate() + 1102 (__tree:1102) 1 WCDBSwift 0x87dcc WCDB::HandlePool::flowBack(WCDB::HandleType, std::__1::shared_ptr<WCDB::InnerHandle> const&) + 265 (HandlePool.cpp:265) 2 WCDBSwift 0x60638 WCDB::Recyclable<std::__1::shared_ptr<WCDB::InnerHandle>>::onUnreferenced() + 504 (function.h:504) 3 WCDBSwift 0x6075c WCDB::Recyclable<std::__1::shared_ptr<WCDB::InnerHandle>>::~Recyclable() + 113 (Recyclable.hpp:113) 4 WCDBSwift 0x93768 std::__1::__tree<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::less<unsigned int>, true>, std::__1::allocator<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, void*>*) + 308 (new:308) 5 WCDBSwift 0x93760 std::__1::__tree<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::less<unsigned int>, true>, std::__1::allocator<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, void*>*) + 81 (pair.h:81) 6 WCDBSwift 0x93760 std::__1::__tree<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::less<unsigned int>, true>, std::__1::allocator<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, void*>*) + 81 (pair.h:81) 7 WCDBSwift 0x93760 std::__1::__tree<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::__map_value_compare<unsigned int, std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, std::__1::less<unsigned int>, true>, std::__1::allocator<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>>>::destroy(std::__1::__tree_node<std::__1::__value_type<unsigned int, WCDB::RecyclableHandle>, void*>*) + 81 (pair.h:81) 8 WCDBSwift 0x93718 std::__1::unique_ptr<std::__1::map<unsigned int, WCDB::RecyclableHandle, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, WCDB::RecyclableHandle>>>, std::__1::default_delete<std::__1::map<unsigned int, WCDB::RecyclableHandle, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, WCDB::RecyclableHandle>>>>>::reset[abi:ue170006](std::__1::map<unsigned int, WCDB::RecyclableHandle, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, WCDB::RecyclableHandle>>>*) + 68 (unique_ptr.h:68) 9 WCDBSwift 0x936e4 std::__1::unique_ptr<std::__1::map<unsigned int, WCDB::RecyclableHandle, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, WCDB::RecyclableHandle>>>, std::__1::default_delete<std::__1::map<unsigned int, WCDB::RecyclableHandle, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, WCDB::RecyclableHandle>>>>>::~unique_ptr[abi:ue170006]() + 266 (unique_ptr.h:266) 10 ??? 0x1bcaea5d0 () 11 ??? 0x1bcaea538 () 12 libsystem_pthread.dylib 0xab08 _pthread_tsd_cleanup + 488 13 libsystem_pthread.dylib 0x4f84 _pthread_exit + 84 14 libsystem_pthread.dylib 0x6854 _pthread_wqthread_legacy_worker_wrap + 62 15 libsystem_pthread.dylib 0x1fa8 _pthread_wqthread + 424 16 libsystem_pthread.dylib 0x1fc0 start_wqthread + 8

WCDB.Operation WCDB.Operation 0 libsystem_kernel.dylib 0x249c __psynch_cvwait + 8 1 libsystem_pthread.dylib 0x1590 _pthread_cond_wait + 1228 2 libc++.1.dylib 0xd598 std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >) + 100 3 WCDBSwift 0x9a358 WCDB::Conditional::wait_for(std::__1::unique_lock<std::__1::mutex>&, double) + 200 (condition_variable.h:200) 4 WCDBSwift 0xb4904 WCDB::TimedQueue<WCDB::OperationQueue::Operation, WCDB::OperationQueue::Parameter>::loop(std::__1::function<void (WCDB::OperationQueue::Operation const&, WCDB::OperationQueue::Parameter const&)> const&) + 143 (TimedQueue.hpp:143) 5 WCDBSwift 0xb476c WCDB::OperationQueue::main() + 476 (function.h:476) 6 WCDBSwift 0xffb8 std::__1::__async_assoc_state<void, std::__1::__async_func<void (WCDB::AsyncQueue::*)(), WCDB::AsyncQueue*>>::__execute() + 1021 (future:1021) 7 WCDBSwift 0x10128 void* std::__1::__thread_proxy[abi:ue170006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (std::__1::__async_assoc_state<void, std::__1::__async_func<void (WCDB::AsyncQueue::*)(), WCDB::AsyncQueue*>>::*)(), std::__1::__async_assoc_state<void, std::__1::__async_func<void (WCDB::AsyncQueue::*)(), WCDB::AsyncQueue*>>*>>(void*) + 266 (unique_ptr.h:266) 8 libsystem_pthread.dylib 0x2a90 _pthread_start + 136 9 libsystem_pthread.dylib 0x1fcc thread_start + 8

This is a fault that occurred online.

Qiuwen-chen commented 1 month ago

How big is the crash rate? We have also encountered this problem, but the crash rate is less than 0.01‰ per day. So we won’t deal with this issue for now.