diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-10-07 20:29:40 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-10-07 20:53:05 +0000 |
commit | 356172042cbc96375be8d663a945879b9f10dd41 (patch) | |
tree | e77fb1af93766b3655df04a55a9fa5dee6ef7971 /vespalib/src/tests/sync/sync_test.cpp | |
parent | 379b3d8c3ce128da5a985ed73fce99326369512c (diff) |
- GC unused code.
- vespalib::Lock -> std::mutex
Diffstat (limited to 'vespalib/src/tests/sync/sync_test.cpp')
-rw-r--r-- | vespalib/src/tests/sync/sync_test.cpp | 131 |
1 files changed, 39 insertions, 92 deletions
diff --git a/vespalib/src/tests/sync/sync_test.cpp b/vespalib/src/tests/sync/sync_test.cpp index c8888bc8e54..0925ce060a0 100644 --- a/vespalib/src/tests/sync/sync_test.cpp +++ b/vespalib/src/tests/sync/sync_test.cpp @@ -3,6 +3,44 @@ #include <vespa/vespalib/testkit/testapp.h> #include <vespa/vespalib/util/sync.h> +namespace vespalib { +class TryLock +{ +private: + friend class LockGuard; + friend class MonitorGuard; + + std::unique_lock<std::mutex> _guard; + std::condition_variable *_cond; + +public: + TryLock(const Lock &lock) + : _guard(*lock._mutex, std::try_to_lock), _cond(nullptr) + {} + TryLock(const Monitor &mon) + : _guard(*mon._mutex, std::try_to_lock), + _cond(_guard ? mon._cond.get() : nullptr) + {} + ~TryLock() = default; + + TryLock(const TryLock &) = delete; + TryLock &operator=(const TryLock &) = delete; + + /** + * @brief Check whether this object holds a lock + * + * @return true if this object holds a lock + **/ + bool hasLock() const { return static_cast<bool>(_guard); } + void unlock() { + if (_guard) { + _guard.unlock(); + _cond = nullptr; + } + } +}; + +} using namespace vespalib; #define CHECK_LOCKED(m) { TryLock tl(m); EXPECT_TRUE(!tl.hasLock()); } @@ -18,7 +56,7 @@ private: LockGuard lockMonitor() { return LockGuard(_monitor); } MonitorGuard obtainMonitor() { return MonitorGuard(_monitor); } public: - ~Test(); + ~Test() override; void testCountDownLatch(); int Main() override; }; @@ -139,97 +177,6 @@ Test::Main() MonitorGuard guard(monitor); CHECK_LOCKED(monitor); } - // TryLock hands the lock over to a LockGuard/MonitorGuard - { - Lock lock; - CHECK_UNLOCKED(lock); - TryLock a(lock); - CHECK_LOCKED(lock); - if (a.hasLock()) { - LockGuard guard(std::move(a)); - CHECK_LOCKED(lock); - } - CHECK_UNLOCKED(lock); - } - { - Monitor mon; - CHECK_UNLOCKED(mon); - TryLock a(mon); - CHECK_LOCKED(mon); - if (a.hasLock()) { - LockGuard guard(std::move(a)); - CHECK_LOCKED(mon); - } - CHECK_UNLOCKED(mon); - } - { - Monitor mon; - CHECK_UNLOCKED(mon); - TryLock a(mon); - CHECK_LOCKED(mon); - if (a.hasLock()) { - MonitorGuard guard(std::move(a)); - CHECK_LOCKED(mon); - } - CHECK_UNLOCKED(mon); - } - { - Lock lock; - - CHECK_UNLOCKED(lock); - TryLock a(lock); - CHECK_LOCKED(lock); - TryLock b(lock); - CHECK_LOCKED(lock); - - EXPECT_TRUE(a.hasLock()); - EXPECT_TRUE(!b.hasLock()); - { - CHECK_LOCKED(lock); - EXPECT_TRUE(a.hasLock()); - LockGuard guard(std::move(a)); - EXPECT_TRUE(!a.hasLock()); - CHECK_LOCKED(lock); - } - CHECK_UNLOCKED(lock); - } - // TryLock will unlock when exiting scope if lock was not passed on - { - Lock lock; - Monitor mon; - CHECK_UNLOCKED(lock); - CHECK_UNLOCKED(mon); - { - TryLock a(lock); - EXPECT_TRUE(a.hasLock()); - TryLock b(mon); - EXPECT_TRUE(b.hasLock()); - CHECK_LOCKED(lock); - CHECK_LOCKED(mon); - } - CHECK_UNLOCKED(lock); - CHECK_UNLOCKED(mon); - } - // TryLock explicitt unlock of lock - { - Lock lock; - TryLock tl(lock); - EXPECT_TRUE(tl.hasLock()); - tl.unlock(); - EXPECT_FALSE(tl.hasLock()); - tl.unlock(); - EXPECT_FALSE(tl.hasLock()); - } - // TryLock explicitt unlock of monitor - { - Monitor lock; - TryLock tl(lock); - EXPECT_TRUE(tl.hasLock()); - tl.unlock(); - EXPECT_FALSE(tl.hasLock()); - tl.unlock(); - EXPECT_FALSE(tl.hasLock()); - } // LockGuard/MonitorGuard have destructive move { Lock lock; |