summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/rename_collection.cpp
diff options
context:
space:
mode:
authorEric Milkie <milkie@mongodb.com>2019-11-25 15:52:06 +0000
committerevergreen <evergreen@mongodb.com>2019-11-25 15:52:06 +0000
commitbf17247e9dfa28b315d6b2c04da0d202ebba8d97 (patch)
treefb3ea8211ef9a6addc9613458cc7dd3826ab923e /src/mongo/db/catalog/rename_collection.cpp
parent257f01131fd83915c7ac6c5964075ce7a805569c (diff)
downloadmongo-bf17247e9dfa28b315d6b2c04da0d202ebba8d97.tar.gz
SERVER-43880 renameBetweenDBs needs to own record data prior to yielding
(cherry picked from commit a811bbe9d2489c428886288651c2dbddec0d123d)
Diffstat (limited to 'src/mongo/db/catalog/rename_collection.cpp')
-rw-r--r--src/mongo/db/catalog/rename_collection.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/rename_collection.cpp b/src/mongo/db/catalog/rename_collection.cpp
index ab389c44055..3a552181ca8 100644
--- a/src/mongo/db/catalog/rename_collection.cpp
+++ b/src/mongo/db/catalog/rename_collection.cpp
@@ -706,6 +706,12 @@ Status renameBetweenDBs(OperationContext* opCtx,
}
record = cursor->next();
}
+
+ // Time to yield; make a safe copy of the current record before releasing our
+ // cursor.
+ if (record)
+ record->data.makeOwned();
+
cursor->save();
// When this exits via success or WCE, we need to restore the cursor.
ON_BLOCK_EXIT([opCtx, ns = tmpName.ns(), &cursor]() {