Follow forwarding pointers for end before addWriteRange

This commit is contained in:
2024-10-30 14:26:37 -07:00
parent 4e685bbc3b
commit 7e1bcbf9be

View File

@@ -3129,13 +3129,13 @@ AddedWriteRange addWriteRange(Node *beginRoot, TrivialSpan begin, Node *endRoot,
beginNode->entry.rangeVersion =
p == nullptr ? writeContext->zero
: std::max(p->entry.rangeVersion, writeContext->zero);
while (endRoot->releaseDeferred) {
endRoot = endRoot->forwardTo;
}
beginNode->entryPresent = true;
}
beginNode->entry.pointVersion = writeVersion;
while (endRoot->releaseDeferred) {
endRoot = endRoot->forwardTo;
}
Node *endNode =
*insert(&getInTree(endRoot, impl), end, writeVersion, writeContext);
@@ -4915,6 +4915,10 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
context.results[i].remaining, writeVersion,
&writeContext);
} else {
while (context.results[i].endInsertionPoint->releaseDeferred) {
context.results[i].endInsertionPoint =
context.results[i].endInsertionPoint->forwardTo;
}
auto [beginNode, endNode] = addWriteRange(
context.results[i].insertionPoint, context.results[i].remaining,
context.results[i].endInsertionPoint,