summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2021-06-09 13:16:45 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-06-09 17:38:58 +0000
commitf852a4786efb9cf2a2a78ebbf0cabf637d45182c (patch)
treebe1b9d6a63f6c308dbb242de0fba36568574b8f2
parentb695ced699ecd7529c3cfbc87b081bc60caea68b (diff)
downloadmongo-f852a4786efb9cf2a2a78ebbf0cabf637d45182c.tar.gz
SERVER-52516 redirect global lock manager accessor to service context decorator
'globalLockManager' will be retained for backwards compatibility with debugger scripts.
-rw-r--r--src/mongo/db/concurrency/lock_state.cpp17
-rw-r--r--src/mongo/db/concurrency/lock_state.h5
2 files changed, 18 insertions, 4 deletions
diff --git a/src/mongo/db/concurrency/lock_state.cpp b/src/mongo/db/concurrency/lock_state.cpp
index 4520f81e207..793a2a2dd7d 100644
--- a/src/mongo/db/concurrency/lock_state.cpp
+++ b/src/mongo/db/concurrency/lock_state.cpp
@@ -118,8 +118,16 @@ private:
};
-// Global lock manager instance.
-LockManager globalLockManager;
+// Provide backwards compatibility for debugger scripts that expect a 'globalLockManager' variable
+// in the anonymous namespace. See buildscripts/gdb/mongo.py and buildscripts/lldb/lldb_commands.py.
+[[maybe_unused]] struct {
+ void dump() {
+ auto serviceContext = getGlobalServiceContext();
+ invariant(serviceContext);
+ auto lockManager = LockManager::get(serviceContext);
+ lockManager->dump();
+ }
+} globalLockManager;
// How often (in millis) to check for deadlock if a lock has not been granted for some time
const Milliseconds MaxWaitTime = Milliseconds(500);
@@ -1097,13 +1105,14 @@ public:
} unusedLockCleaner;
} // namespace
-
//
// Standalone functions
//
LockManager* getGlobalLockManager() {
- return &globalLockManager;
+ auto serviceContext = getGlobalServiceContext();
+ invariant(serviceContext);
+ return LockManager::get(serviceContext);
}
void reportGlobalLockingStats(SingleThreadedLockStats* outStats) {
diff --git a/src/mongo/db/concurrency/lock_state.h b/src/mongo/db/concurrency/lock_state.h
index 202530cf8ae..d29f7817079 100644
--- a/src/mongo/db/concurrency/lock_state.h
+++ b/src/mongo/db/concurrency/lock_state.h
@@ -403,6 +403,11 @@ public:
/**
* Retrieves the global lock manager instance.
+ * Legacy global lock manager accessor for internal lock implementation * and debugger scripts
+ * such as gdb/mongo_lock.py.
+ * The lock manager is now a decoration on the service context and this accessor is retained for
+ * startup, lock internals, and debugger scripts.
+ * Using LockManager::get(ServiceContext*) where possible is preferable.
*/
LockManager* getGlobalLockManager();