From a7c37bb748141c4dfa4ee14bfb0eeae6852a5e68 Mon Sep 17 00:00:00 2001 From: shosseinimotlagh Date: Wed, 23 Aug 2023 14:25:34 -0700 Subject: [PATCH] SDSTOR-11603 : Fix shared_mutex for multi threads Make a writer fiber increase m_write_waiters only once even after failure attempts of acquiring a lock when awekening --- conanfile.py | 2 +- src/.clang-format | 1 - src/lib/reactor/fiber_lib_boost.cpp | 6 ++++-- src/test/test_fiber_shared_mutex.cpp | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/conanfile.py b/conanfile.py index bf105405..33eae421 100644 --- a/conanfile.py +++ b/conanfile.py @@ -5,7 +5,7 @@ class IOMgrConan(ConanFile): name = "iomgr" - version = "9.2.3" + version = "9.2.4" homepage = "https://github.com/eBay/IOManager" description = "Asynchronous event manager" topics = ("ebay", "nublox", "aio") diff --git a/src/.clang-format b/src/.clang-format index 2f771200..fdfa11f5 100644 --- a/src/.clang-format +++ b/src/.clang-format @@ -18,7 +18,6 @@ AlignOperands: false AlignTrailingComments: true AllowShortBlocksOnASingleLine: true AllowShortIfStatementsOnASingleLine: true -AllowShortBlocksOnASingleLine: true AllowShortCaseLabelsOnASingleLine: false # AllowShortFunctionsOnASingleLine: InlineOnly # AllowShortLoopsOnASingleLine: false diff --git a/src/lib/reactor/fiber_lib_boost.cpp b/src/lib/reactor/fiber_lib_boost.cpp index e2edd6d1..c1c3236d 100644 --- a/src/lib/reactor/fiber_lib_boost.cpp +++ b/src/lib/reactor/fiber_lib_boost.cpp @@ -66,8 +66,10 @@ void FiberManagerLib::shared_mutex::lock() { } else { // Owned by the writer or reader, add ourselves to writer queue if (s_writer_priority) { - ++m_write_waiters; - am_i_write_waiter = true; + if (!am_i_write_waiter) { + ++m_write_waiters; + am_i_write_waiter = true; + } LOGTRACEMOD(iomgr, "[Writer Lock for ctx={}]: Queued, owned by owner={} num_readers={}", (void*)active_ctx, (void*)m_write_owner, m_readers); } diff --git a/src/test/test_fiber_shared_mutex.cpp b/src/test/test_fiber_shared_mutex.cpp index 10f4c87b..55e2f1e1 100644 --- a/src/test/test_fiber_shared_mutex.cpp +++ b/src/test/test_fiber_shared_mutex.cpp @@ -29,9 +29,9 @@ SISL_LOGGING_INIT(IOMGR_LOG_MODS, flip) SISL_OPTION_GROUP(test_fiber_shared_mutex, (num_threads, "", "num_threads", "number of threads", - ::cxxopts::value< uint32_t >()->default_value("2"), "number"), + ::cxxopts::value< uint32_t >()->default_value("10"), "number"), (num_fibers, "", "num_fibers", "number of fibers per thread", - ::cxxopts::value< uint32_t >()->default_value("8"), "number"), + ::cxxopts::value< uint32_t >()->default_value("20"), "number"), (num_iters, "", "num_iters", "number of iterations", ::cxxopts::value< uint64_t >()->default_value("10000"), "number"), (spdk, "", "spdk", "spdk", ::cxxopts::value< bool >()->default_value("false"), "true or false"));