diff options
author | Eric Milkie <milkie@mongodb.com> | 2019-11-25 16:19:49 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-11-25 16:19:49 +0000 |
commit | 253caebbb4531e4852d18446c061de6f4e21f074 (patch) | |
tree | 9ac5a8ddfd38e4cc6cb891004bcdeb4ff2d268b3 /src/mongo | |
parent | bf17247e9dfa28b315d6b2c04da0d202ebba8d97 (diff) | |
download | mongo-253caebbb4531e4852d18446c061de6f4e21f074.tar.gz |
SERVER-43882 startBuildingIndexForRecovery needs to own record data prior to yielding
(cherry picked from commit 4b92498a94f42790d2f6a3f26a965acb1de4702f)
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/catalog/index_builds_manager.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/index_builds_manager.cpp b/src/mongo/db/catalog/index_builds_manager.cpp index 87c3b384a9d..b6f35ceb1b6 100644 --- a/src/mongo/db/catalog/index_builds_manager.cpp +++ b/src/mongo/db/catalog/index_builds_manager.cpp @@ -179,6 +179,11 @@ StatusWith<std::pair<long long, long long>> IndexBuildsManager::startBuildingInd } 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(); // Can't fail per API definition // When this exits via success or WCE, we need to restore the cursor ON_BLOCK_EXIT([opCtx, ns, &cursor]() { |