diff options
author | Geert Bosch <geert@mongodb.com> | 2016-10-03 14:01:52 -0400 |
---|---|---|
committer | Geert Bosch <geert@mongodb.com> | 2016-10-06 18:15:55 -0400 |
commit | 36b0eac52c0ca75aa7171ff977ac37a9bd85d2d1 (patch) | |
tree | eaba5d1cc1f484ba47b1d0559c769c73ddf70fb2 /src/mongo | |
parent | 638796c704bafae2f255c9d8cb3c9aa2738a2789 (diff) | |
download | mongo-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.cpp | 7 |
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; |