Details
Description
As detected by ThreadSanitizer, there is a potential deadlock due to a cycle in lock acquiring order:
TSAN_OPTIONS=second_deadlock_stack=1 ./ep-engine_kvstore_test
|
==================
|
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=25924)
|
Cycle in lock order graph: M123 (0x7d040000f770) => M191 (0x7d0c0000ee50) => M123
|
|
Mutex M191 acquired here while holding mutex M123 in main thread:
|
#0 pthread_mutex_lock <null> (ep-engine_kvstore_test+0x000000478440)
|
#1 plock_lock /home/daver/repos/couchbase/server/forestdb/utils/partiallock.cc:123 (libforestdb.so+0x000000038aa6)
|
#2 KVStoreFactory::create(KVStoreConfig&, bool) /home/daver/repos/couchbase/server/ep-engine/src/kvstore.cc:54 (ep-engine_kvstore_test+0x0000004be700)
|
#3 basic_kvstore_test(std::string&) /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:74 (ep-engine_kvstore_test+0x0000004bba6a)
|
#4 main /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:101 (ep-engine_kvstore_test+0x0000004bc3f2)
|
|
Mutex M123 previously acquired by the same thread here:
|
#0 pthread_spin_lock <null> (ep-engine_kvstore_test+0x00000045b470)
|
#1 plock_lock /home/daver/repos/couchbase/server/forestdb/utils/partiallock.cc:58 (libforestdb.so+0x0000000389ac)
|
#2 KVStoreFactory::create(KVStoreConfig&, bool) /home/daver/repos/couchbase/server/ep-engine/src/kvstore.cc:54 (ep-engine_kvstore_test+0x0000004be700)
|
#3 basic_kvstore_test(std::string&) /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:74 (ep-engine_kvstore_test+0x0000004bba6a)
|
#4 main /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:101 (ep-engine_kvstore_test+0x0000004bc3f2)
|
|
Mutex M123 acquired here while holding mutex M191 in main thread:
|
#0 pthread_spin_lock <null> (ep-engine_kvstore_test+0x00000045b470)
|
#1 plock_unlock /home/daver/repos/couchbase/server/forestdb/utils/partiallock.cc:138 (libforestdb.so+0x000000038b64)
|
#2 KVStoreFactory::create(KVStoreConfig&, bool) /home/daver/repos/couchbase/server/ep-engine/src/kvstore.cc:54 (ep-engine_kvstore_test+0x0000004be700)
|
#3 basic_kvstore_test(std::string&) /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:74 (ep-engine_kvstore_test+0x0000004bba6a)
|
#4 main /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:101 (ep-engine_kvstore_test+0x0000004bc3f2)
|
|
Mutex M191 previously acquired by the same thread here:
|
#0 pthread_mutex_lock <null> (ep-engine_kvstore_test+0x000000478440)
|
#1 plock_lock /home/daver/repos/couchbase/server/forestdb/utils/partiallock.cc:123 (libforestdb.so+0x000000038aa6)
|
#2 KVStoreFactory::create(KVStoreConfig&, bool) /home/daver/repos/couchbase/server/ep-engine/src/kvstore.cc:54 (ep-engine_kvstore_test+0x0000004be700)
|
#3 basic_kvstore_test(std::string&) /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:74 (ep-engine_kvstore_test+0x0000004bba6a)
|
#4 main /home/daver/repos/couchbase/server/ep-engine/tests/module_tests/kvstore_test.cc:101 (ep-engine_kvstore_test+0x0000004bc3f2)
|
|
SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) ??:0 __interceptor_pthread_mutex_lock
|
==================
|
ThreadSanitizer: reported 1 warnings
|
To reproduce:
- Build with ThreadSanitizer (see https://github.com/couchbase/tlm#thread-sanitizer)
- Run ./ep-engine_kvstore_test (set env var TSAN_OPTIONS=second_deadlock_stack=1 for extra details).
Attachments
Issue Links
- relates to
-
MB-16466 lock-order-inversion (potential deadlock) in forestdb - ep-engine_kvstore-test
- Closed