Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-15502

lock-order-inversion (potential deadlock) in forestdb partiallock

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Fix
    • Critical
    • 4.0.0
    • 4.0.0
    • forestdb
    • Security Level: Public
    • None
    • Untriaged
    • Centos 64-bit
    • Unknown
    • ForestDB: Oct 26 - Nov 13

    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:

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              sundar Sundar Sridharan (Inactive)
              drigby Dave Rigby (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes

                  PagerDuty