summaryrefslogtreecommitdiffstats
path: root/vespalib/src/tests/sync/sync_test.cpp
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-10-07 20:29:40 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-10-07 20:53:05 +0000
commit356172042cbc96375be8d663a945879b9f10dd41 (patch)
treee77fb1af93766b3655df04a55a9fa5dee6ef7971 /vespalib/src/tests/sync/sync_test.cpp
parent379b3d8c3ce128da5a985ed73fce99326369512c (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.cpp131
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;