diff options
author | Judah Schvimer <judah@mongodb.com> | 2017-08-16 14:30:53 -0400 |
---|---|---|
committer | Judah Schvimer <judah@mongodb.com> | 2017-11-30 14:53:34 -0500 |
commit | fb6c351b39148a9c9d8615d58451fb972026f7be (patch) | |
tree | 08957fa5258758a426b77521b5521c9c0e5bee34 /src/mongo/db/concurrency | |
parent | 10d74315247887467f1234b7566265ac749d5f69 (diff) | |
download | mongo-fb6c351b39148a9c9d8615d58451fb972026f7be.tar.gz |
SERVER-30648 Set GlobalLockAcquisitionTracker after we waitForLock
(cherry picked from commit ebcb24eed4b5aaa059b02849512efbc6b494449d)
Diffstat (limited to 'src/mongo/db/concurrency')
-rw-r--r-- | src/mongo/db/concurrency/d_concurrency.cpp | 15 | ||||
-rw-r--r-- | src/mongo/db/concurrency/d_concurrency.h | 6 |
2 files changed, 12 insertions, 9 deletions
diff --git a/src/mongo/db/concurrency/d_concurrency.cpp b/src/mongo/db/concurrency/d_concurrency.cpp index 06fe0182bfb..6e7bd1ee7d6 100644 --- a/src/mongo/db/concurrency/d_concurrency.cpp +++ b/src/mongo/db/concurrency/d_concurrency.cpp @@ -74,14 +74,6 @@ Lock::GlobalLock::GlobalLock(Locker* locker, EnqueueOnly enqueueOnly) : _locker(locker), _result(LOCK_INVALID), _pbwm(locker, resourceIdParallelBatchWriterMode) { _enqueue(lockMode, timeoutMs); - - if ((lockMode == LockMode::MODE_IX || lockMode == LockMode::MODE_X) && isLocked() && - haveClient()) { - auto opCtx = cc().getOperationContext(); - if (opCtx) { - GlobalLockAcquisitionTracker::get(opCtx).setGlobalExclusiveLockTaken(); - } - } } void Lock::GlobalLock::_enqueue(LockMode lockMode, unsigned timeoutMs) { @@ -100,6 +92,13 @@ void Lock::GlobalLock::waitForLock(unsigned timeoutMs) { if (_result != LOCK_OK && _locker->shouldConflictWithSecondaryBatchApplication()) { _pbwm.unlock(); } + + if (_locker->isWriteLocked() && haveClient()) { + auto opCtx = cc().getOperationContext(); + if (opCtx) { + GlobalLockAcquisitionTracker::get(opCtx).setGlobalExclusiveLockTaken(); + } + } } void Lock::GlobalLock::_unlock() { diff --git a/src/mongo/db/concurrency/d_concurrency.h b/src/mongo/db/concurrency/d_concurrency.h index 6274814ca1c..b8df869089e 100644 --- a/src/mongo/db/concurrency/d_concurrency.h +++ b/src/mongo/db/concurrency/d_concurrency.h @@ -163,6 +163,9 @@ public: /** * Enqueues lock but does not block on lock acquisition. * Call waitForLock() to complete locking process. + * + * Does not set that the global lock was taken on the GlobalLockAcquisitionTracker. Call + * waitForLock to do so. */ GlobalLock(Locker* locker, LockMode lockMode, unsigned timeoutMs, EnqueueOnly enqueueOnly); @@ -171,7 +174,8 @@ public: } /** - * Waits for lock to be granted. + * Waits for lock to be granted. Sets that the global lock was taken on the + * GlobalLockAcquisitionTracker. */ void waitForLock(unsigned timeoutMs); |