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> { ...@@ -103,9 +103,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
LockedPtr wlock() { LockedPtr wlock() {
return LockedPtr(static_cast<Subclass*>(this)); 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 * Attempts to acquire the lock in exclusive mode. If acquisition is
...@@ -117,9 +114,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> { ...@@ -117,9 +114,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
TryWLockedPtr tryWLock() { TryWLockedPtr tryWLock() {
return TryWLockedPtr{static_cast<Subclass*>(this)}; 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 * Acquire a read lock, and return a ConstLockedPtr that can be used to
...@@ -151,11 +145,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> { ...@@ -151,11 +145,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
LockedPtr wlock(const std::chrono::duration<Rep, Period>& timeout) { LockedPtr wlock(const std::chrono::duration<Rep, Period>& timeout) {
return LockedPtr(static_cast<Subclass*>(this), 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. * Attempts to acquire the lock, or fails if the timeout elapses first.
...@@ -188,10 +177,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> { ...@@ -188,10 +177,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
auto withWLock(Function&& function) { auto withWLock(Function&& function) {
return function(*wlock()); return function(*wlock());
} }
template <class Function>
auto withWLock(Function&& function) const {
return function(*wlock());
}
/** /**
* Invoke a function while holding the lock exclusively. * Invoke a function while holding the lock exclusively.
...@@ -206,10 +191,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> { ...@@ -206,10 +191,6 @@ class SynchronizedBase<Subclass, detail::MutexLevel::SHARED> {
auto withWLockPtr(Function&& function) { auto withWLockPtr(Function&& function) {
return function(wlock()); 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. * Invoke a function while holding an the lock in shared mode.
...@@ -1538,10 +1519,6 @@ template <typename D, typename M, typename... Args> ...@@ -1538,10 +1519,6 @@ template <typename D, typename M, typename... Args>
auto wlock(Synchronized<D, M>& synchronized, Args&&... args) { auto wlock(Synchronized<D, M>& synchronized, Args&&... args) {
return detail::wlock(synchronized, std::forward<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> template <typename Data, typename Mutex, typename... Args>
auto rlock(const Synchronized<Data, Mutex>& synchronized, Args&&... args) { auto rlock(const Synchronized<Data, Mutex>& synchronized, Args&&... args) {
return detail::rlock(synchronized, std::forward<Args>(args)...); return detail::rlock(synchronized, std::forward<Args>(args)...);
......
...@@ -216,10 +216,6 @@ testWithLock() { ...@@ -216,10 +216,6 @@ testWithLock() {
obj.withWLock([](const std::vector<int>& lockedObj) { obj.withWLock([](const std::vector<int>& lockedObj) {
EXPECT_EQ(1002, lockedObj.size()); 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) { obj.withRLock([](const std::vector<int>& lockedObj) {
EXPECT_EQ(1002, lockedObj.size()); EXPECT_EQ(1002, lockedObj.size());
EXPECT_EQ(11, lockedObj.back()); EXPECT_EQ(11, lockedObj.back());
...@@ -232,10 +228,6 @@ testWithLock() { ...@@ -232,10 +228,6 @@ testWithLock() {
obj.withWLock([](auto& lockedObj) { lockedObj.push_back(12); }); obj.withWLock([](auto& lockedObj) { lockedObj.push_back(12); });
obj.withWLock( obj.withWLock(
[](const auto& lockedObj) { EXPECT_EQ(1003, lockedObj.size()); }); [](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) { obj.withRLock([](const auto& lockedObj) {
EXPECT_EQ(1003, lockedObj.size()); EXPECT_EQ(1003, lockedObj.size());
EXPECT_EQ(12, lockedObj.back()); EXPECT_EQ(12, lockedObj.back());
...@@ -265,10 +257,6 @@ testWithLock() { ...@@ -265,10 +257,6 @@ testWithLock() {
} }
EXPECT_EQ(15, lockedObj->back()); EXPECT_EQ(15, lockedObj->back());
}); });
constObj.withWLockPtr([](auto&& lockedObj) {
EXPECT_EQ(1005, lockedObj->size());
EXPECT_EQ(15, lockedObj->back());
});
#else #else
obj.withWLockPtr([](typename SynchType::LockedPtr&& lockedObj) { obj.withWLockPtr([](typename SynchType::LockedPtr&& lockedObj) {
lockedObj->push_back(13); lockedObj->push_back(13);
...@@ -281,10 +269,6 @@ testWithLock() { ...@@ -281,10 +269,6 @@ testWithLock() {
lockedObj->push_back(16); lockedObj->push_back(16);
EXPECT_EQ(1006, lockedObj->size()); 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) { obj.withRLockPtr([](typename SynchType::ConstLockedPtr&& lockedObj) {
EXPECT_EQ(1006, lockedObj->size()); EXPECT_EQ(1006, lockedObj->size());
EXPECT_EQ(16, lockedObj->back()); 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