diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2015-01-02 14:03:06 -0500 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2015-01-06 17:02:49 -0500 |
commit | 143765cfe3fa006c7109e409abd4a14eb6b36c2e (patch) | |
tree | 35ae7fc2e425778733f2fef0619f9d90972c2d04 /src/mongo/db/concurrency/lock_state.cpp | |
parent | 50c0c4491c856cf4217fd36057066d09281a96d8 (diff) | |
download | mongo-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.cpp | 10 |
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(); } |