diff options
author | Maria van Keulen <maria@mongodb.com> | 2017-07-28 16:01:00 -0400 |
---|---|---|
committer | Maria van Keulen <maria@mongodb.com> | 2017-08-30 11:25:24 -0400 |
commit | 49708981947fbd44c0b8afa8c24b9c586c25091d (patch) | |
tree | 5d8cb68b670172d408425a10caf7b34aa728ed11 /src/mongo/db/db_raii.h | |
parent | 03055999749ed577af14d5d9cc969f616b4c3196 (diff) | |
download | mongo-49708981947fbd44c0b8afa8c24b9c586c25091d.tar.gz |
SERVER-29839 Protect from mid-command renames in parseNsOrUUID
Diffstat (limited to 'src/mongo/db/db_raii.h')
-rw-r--r-- | src/mongo/db/db_raii.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/mongo/db/db_raii.h b/src/mongo/db/db_raii.h index 641b64e7988..7ff6b8f1a1d 100644 --- a/src/mongo/db/db_raii.h +++ b/src/mongo/db/db_raii.h @@ -58,6 +58,7 @@ class AutoGetDb { public: AutoGetDb(OperationContext* opCtx, StringData ns, LockMode mode); + AutoGetDb(OperationContext* opCtx, StringData ns, Lock::DBLock lock); Database* getDb() const { return _db; @@ -94,6 +95,11 @@ public: LockMode modeColl) : AutoGetCollection(opCtx, nss, modeDB, modeColl, ViewMode::kViewsForbidden) {} + AutoGetCollection(OperationContext* opCtx, + const NamespaceString& nss, + LockMode modeColl, + ViewMode viewMode, + Lock::DBLock lock); /** * This constructor is intended for internal use and should not be used outside this file. * AutoGetCollectionForReadCommand and AutoGetCollectionOrViewForReadCommand use 'viewMode' to @@ -272,6 +278,10 @@ public: const NamespaceString& nss, AutoGetCollection::ViewMode viewMode); + AutoGetCollectionForRead(OperationContext* opCtx, + const NamespaceString& nss, + AutoGetCollection::ViewMode viewMode, + Lock::DBLock lock); Database* getDb() const { return _autoColl->getDb(); } @@ -309,6 +319,12 @@ public: : AutoGetCollectionForReadCommand( opCtx, nss, AutoGetCollection::ViewMode::kViewsForbidden) {} + AutoGetCollectionForReadCommand(OperationContext* opCtx, + const NamespaceString& nss, + Lock::DBLock lock) + : AutoGetCollectionForReadCommand( + opCtx, nss, AutoGetCollection::ViewMode::kViewsForbidden, std::move(lock)) {} + Database* getDb() const { return _autoCollForRead->getDb(); } @@ -322,6 +338,11 @@ protected: const NamespaceString& nss, AutoGetCollection::ViewMode viewMode); + AutoGetCollectionForReadCommand(OperationContext* opCtx, + const NamespaceString& nss, + AutoGetCollection::ViewMode viewMode, + Lock::DBLock lock); + // '_autoCollForRead' may need to be reset by AutoGetCollectionOrViewForReadCommand, so needs to // be a boost::optional. boost::optional<AutoGetCollectionForRead> _autoCollForRead; @@ -343,6 +364,9 @@ class AutoGetCollectionOrViewForReadCommand final : public AutoGetCollectionForR public: AutoGetCollectionOrViewForReadCommand(OperationContext* opCtx, const NamespaceString& nss); + AutoGetCollectionOrViewForReadCommand(OperationContext* opCtx, + const NamespaceString& nss, + Lock::DBLock lock); ViewDefinition* getView() const { return _view.get(); |