diff options
author | Eric Milkie <milkie@mongodb.com> | 2019-11-25 15:52:06 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-11-25 15:52:06 +0000 |
commit | bf17247e9dfa28b315d6b2c04da0d202ebba8d97 (patch) | |
tree | fb3ea8211ef9a6addc9613458cc7dd3826ab923e | |
parent | 257f01131fd83915c7ac6c5964075ce7a805569c (diff) | |
download | mongo-bf17247e9dfa28b315d6b2c04da0d202ebba8d97.tar.gz |
SERVER-43880 renameBetweenDBs needs to own record data prior to yielding
(cherry picked from commit a811bbe9d2489c428886288651c2dbddec0d123d)
-rw-r--r-- | src/mongo/db/catalog/rename_collection.cpp | 6 |
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]() { |