summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Milkie <milkie@mongodb.com>2019-11-25 16:19:49 +0000
committerevergreen <evergreen@mongodb.com>2019-11-25 16:19:49 +0000
commit253caebbb4531e4852d18446c061de6f4e21f074 (patch)
tree9ac5a8ddfd38e4cc6cb891004bcdeb4ff2d268b3
parentbf17247e9dfa28b315d6b2c04da0d202ebba8d97 (diff)
downloadmongo-253caebbb4531e4852d18446c061de6f4e21f074.tar.gz
SERVER-43882 startBuildingIndexForRecovery needs to own record data prior to yielding
(cherry picked from commit 4b92498a94f42790d2f6a3f26a965acb1de4702f)
-rw-r--r--src/mongo/db/catalog/index_builds_manager.cpp5
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]() {