summaryrefslogtreecommitdiff
path: root/src/mongo/db/db_raii.h
diff options
context:
space:
mode:
authorMaria van Keulen <maria@mongodb.com>2017-07-28 16:01:00 -0400
committerMaria van Keulen <maria@mongodb.com>2017-08-30 11:25:24 -0400
commit49708981947fbd44c0b8afa8c24b9c586c25091d (patch)
tree5d8cb68b670172d408425a10caf7b34aa728ed11 /src/mongo/db/db_raii.h
parent03055999749ed577af14d5d9cc969f616b4c3196 (diff)
downloadmongo-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.h24
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();