summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorGeert Bosch <geert@mongodb.com>2016-10-03 14:01:52 -0400
committerGeert Bosch <geert@mongodb.com>2016-10-06 18:15:55 -0400
commit36b0eac52c0ca75aa7171ff977ac37a9bd85d2d1 (patch)
treeeaba5d1cc1f484ba47b1d0559c769c73ddf70fb2 /src/mongo
parent638796c704bafae2f255c9d8cb3c9aa2738a2789 (diff)
downloadmongo-36b0eac52c0ca75aa7171ff977ac37a9bd85d2d1.tar.gz
SERVER-25892 Hold global lock while listing databases
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/db/commands/list_databases.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/mongo/db/commands/list_databases.cpp b/src/mongo/db/commands/list_databases.cpp
index d73851d1bde..f97988641fa 100644
--- a/src/mongo/db/commands/list_databases.cpp
+++ b/src/mongo/db/commands/list_databases.cpp
@@ -33,6 +33,7 @@
#include "mongo/db/catalog/database_holder.h"
#include "mongo/db/client.h"
#include "mongo/db/commands.h"
+#include "mongo/db/concurrency/d_concurrency.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/service_context.h"
#include "mongo/db/storage/storage_engine.h"
@@ -82,7 +83,11 @@ public:
BSONObjBuilder& result) {
vector<string> dbNames;
StorageEngine* storageEngine = getGlobalServiceContext()->getGlobalStorageEngine();
- storageEngine->listDatabases(&dbNames);
+ {
+ ScopedTransaction transaction(txn, MODE_IS);
+ Lock::GlobalLock lk(txn->lockState(), MODE_IS, UINT_MAX);
+ storageEngine->listDatabases(&dbNames);
+ }
vector<BSONObj> dbInfos;