summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJudah Schvimer <judah@mongodb.com>2017-08-16 14:30:53 -0400
committerJudah Schvimer <judah@mongodb.com>2017-11-30 14:53:34 -0500
commitfb6c351b39148a9c9d8615d58451fb972026f7be (patch)
tree08957fa5258758a426b77521b5521c9c0e5bee34 /src
parent10d74315247887467f1234b7566265ac749d5f69 (diff)
downloadmongo-fb6c351b39148a9c9d8615d58451fb972026f7be.tar.gz
SERVER-30648 Set GlobalLockAcquisitionTracker after we waitForLock
(cherry picked from commit ebcb24eed4b5aaa059b02849512efbc6b494449d)
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/concurrency/d_concurrency.cpp15
-rw-r--r--src/mongo/db/concurrency/d_concurrency.h6
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);