summaryrefslogtreecommitdiff
path: root/src/mongo/db/clientcursor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/clientcursor.cpp')
-rw-r--r--src/mongo/db/clientcursor.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mongo/db/clientcursor.cpp b/src/mongo/db/clientcursor.cpp
index 2a471eb1288..c9994c1ea7f 100644
--- a/src/mongo/db/clientcursor.cpp
+++ b/src/mongo/db/clientcursor.cpp
@@ -40,6 +40,7 @@
#include "mongo/db/auth/privilege.h"
#include "mongo/db/client.h"
#include "mongo/db/commands.h"
+#include "mongo/db/commands/external_data_source_scope_guard.h"
#include "mongo/db/commands/server_status.h"
#include "mongo/db/commands/server_status_metric.h"
#include "mongo/db/curop.h"
@@ -65,6 +66,10 @@ static CounterMetric cursorStatsTimedOut{"cursor.timedOut"};
static CounterMetric cursorStatsTotalOpened{"cursor.totalOpened"};
static CounterMetric cursorStatsMoreThanOneBatch{"cursor.moreThanOneBatch"};
+const ClientCursor::Decoration<std::shared_ptr<ExternalDataSourceScopeGuard>>
+ ExternalDataSourceScopeGuard::get =
+ ClientCursor::declareDecoration<std::shared_ptr<ExternalDataSourceScopeGuard>>();
+
ClientCursor::ClientCursor(ClientCursorParams params,
CursorId cursorId,
OperationContext* operationUsingCursor,
@@ -133,6 +138,9 @@ void ClientCursor::dispose(OperationContext* opCtx) {
}
_exec->dispose(opCtx);
+ // Update opCtx of the decorated ExternalDataSourceScopeGuard object so that it can drop virtual
+ // collections in the new 'opCtx'.
+ ExternalDataSourceScopeGuard::updateOperationContext(this, opCtx);
_disposed = true;
}