summaryrefslogtreecommitdiff
path: root/src/mongo/db/concurrency/lock_state.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2015-01-02 14:03:06 -0500
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2015-01-06 17:02:49 -0500
commit143765cfe3fa006c7109e409abd4a14eb6b36c2e (patch)
tree35ae7fc2e425778733f2fef0619f9d90972c2d04 /src/mongo/db/concurrency/lock_state.cpp
parent50c0c4491c856cf4217fd36057066d09281a96d8 (diff)
downloadmongo-143765cfe3fa006c7109e409abd4a14eb6b36c2e.tar.gz
SERVER-16065 Drop flush lock early if not doing remap
Diffstat (limited to 'src/mongo/db/concurrency/lock_state.cpp')
-rw-r--r--src/mongo/db/concurrency/lock_state.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mongo/db/concurrency/lock_state.cpp b/src/mongo/db/concurrency/lock_state.cpp
index 1e13cdf4151..970b9860ca7 100644
--- a/src/mongo/db/concurrency/lock_state.cpp
+++ b/src/mongo/db/concurrency/lock_state.cpp
@@ -706,7 +706,8 @@ namespace {
AutoAcquireFlushLockForMMAPV1Commit::AutoAcquireFlushLockForMMAPV1Commit(Locker* locker)
- : _locker(static_cast<MMAPV1LockerImpl*>(locker)) {
+ : _locker(locker),
+ _released(false) {
invariant(LOCK_OK == _locker->lock(resourceIdMMAPV1Flush, MODE_S));
}
@@ -720,11 +721,14 @@ namespace {
}
void AutoAcquireFlushLockForMMAPV1Commit::release() {
- invariant(_locker->unlock(resourceIdMMAPV1Flush));
+ if (!_released) {
+ invariant(_locker->unlock(resourceIdMMAPV1Flush));
+ _released = true;
+ }
}
AutoAcquireFlushLockForMMAPV1Commit::~AutoAcquireFlushLockForMMAPV1Commit() {
- invariant(_locker->unlock(resourceIdMMAPV1Flush));
+ release();
}