Commit 37c011d8 authored by Aaryaman Sagar's avatar Aaryaman Sagar Committed by Facebook Github Bot

Remove const wlock acquisition

Summary:
Change the write acquire interface to only acquire write locks on non-const
`Synchronized` instances.  This reflects the intention of mutation associated
with a write lock.

Reviewed By: yfeldblum

Differential Revision: D8851208

fbshipit-source-id: 5be9d2e4a38d25632430a9b6c981b6e7f8412daa
parent 9793a0e7
......@@ -103,9 +103,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
LockedPtr wlock() {
return LockedPtr(static_cast<Subclass*>(this));
}
ConstWLockedPtr wlock() const {
return ConstWLockedPtr(static_cast<const Subclass*>(this));
}
/**
* Attempts to acquire the lock in exclusive mode. If acquisition is
......@@ -117,9 +114,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
TryWLockedPtr tryWLock() {
return TryWLockedPtr{static_cast<Subclass*>(this)};
}
ConstTryWLockedPtr tryWLock() const {
return ConstTryWLockedPtr{static_cast<const Subclass*>(this)};
}
/**
* Acquire a read lock, and return a ConstLockedPtr that can be used to
......@@ -151,11 +145,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
LockedPtr wlock(const std::chrono::duration<Rep, Period>& timeout) {
return LockedPtr(static_cast<Subclass*>(this), timeout);
}
template <class Rep, class Period>
ConstWLockedPtr wlock(
const std::chrono::duration<Rep, Period>& timeout) const {
return ConstWLockedPtr(static_cast<const Subclass*>(this), timeout);
}
/**
* Attempts to acquire the lock, or fails if the timeout elapses first.
......@@ -188,10 +177,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
auto withWLock(Function&& function) {
return function(*wlock());
}
template <class Function>
auto withWLock(Function&& function) const {
return function(*wlock());
}
/**
* Invoke a function while holding the lock exclusively.
......@@ -206,10 +191,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
auto withWLockPtr(Function&& function) {
return function(wlock());
}
template <class Function>
auto withWLockPtr(Function&& function) const {
return function(wlock());
}
/**
* Invoke a function while holding an the lock in shared mode.
......@@ -1538,10 +1519,6 @@ template <typename D, typename M, typename... Args>
auto wlock(Synchronized<D, M>& synchronized, Args&&... args) {
return detail::wlock(synchronized, std::forward<Args>(args)...);
}
template <typename D, typename M, typename... Args>
auto wlock(const Synchronized<D, M>& synchronized, Args&&... args) {
return detail::wlock(synchronized, std::forward<Args>(args)...);
}
template <typename Data, typename Mutex, typename... Args>
auto rlock(const Synchronized<Data, Mutex>& synchronized, Args&&... args) {
return detail::rlock(synchronized, std::forward<Args>(args)...);
......
......@@ -216,10 +216,6 @@ testWithLock() {
obj.withWLock([](const std::vector<int>& lockedObj) {
EXPECT_EQ(1002, lockedObj.size());
});
constObj.withWLock([](const std::vector<int>& lockedObj) {
EXPECT_EQ(1002, lockedObj.size());
EXPECT_EQ(11, lockedObj.back());
});
obj.withRLock([](const std::vector<int>& lockedObj) {
EXPECT_EQ(1002, lockedObj.size());
EXPECT_EQ(11, lockedObj.back());
......@@ -232,10 +228,6 @@ testWithLock() {
obj.withWLock([](auto& lockedObj) { lockedObj.push_back(12); });
obj.withWLock(
[](const auto& lockedObj) { EXPECT_EQ(1003, lockedObj.size()); });
constObj.withWLock([](const auto& lockedObj) {
EXPECT_EQ(1003, lockedObj.size());
EXPECT_EQ(12, lockedObj.back());
});
obj.withRLock([](const auto& lockedObj) {
EXPECT_EQ(1003, lockedObj.size());
EXPECT_EQ(12, lockedObj.back());
......@@ -265,10 +257,6 @@ testWithLock() {
}
EXPECT_EQ(15, lockedObj->back());
});
constObj.withWLockPtr([](auto&& lockedObj) {
EXPECT_EQ(1005, lockedObj->size());
EXPECT_EQ(15, lockedObj->back());
});
#else
obj.withWLockPtr([](typename SynchType::LockedPtr&& lockedObj) {
lockedObj->push_back(13);
......@@ -281,10 +269,6 @@ testWithLock() {
lockedObj->push_back(16);
EXPECT_EQ(1006, lockedObj->size());
});
constObj.withWLockPtr([](typename SynchType::ConstWLockedPtr&& lockedObj) {
EXPECT_EQ(1006, lockedObj->size());
EXPECT_EQ(16, lockedObj->back());
});
obj.withRLockPtr([](typename SynchType::ConstLockedPtr&& lockedObj) {
EXPECT_EQ(1006, lockedObj->size());
EXPECT_EQ(16, lockedObj->back());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment