Follow forwarding pointers for end before addWriteRange
This commit is contained in:
@@ -3129,13 +3129,13 @@ AddedWriteRange addWriteRange(Node *beginRoot, TrivialSpan begin, Node *endRoot,
|
|||||||
beginNode->entry.rangeVersion =
|
beginNode->entry.rangeVersion =
|
||||||
p == nullptr ? writeContext->zero
|
p == nullptr ? writeContext->zero
|
||||||
: std::max(p->entry.rangeVersion, writeContext->zero);
|
: std::max(p->entry.rangeVersion, writeContext->zero);
|
||||||
|
while (endRoot->releaseDeferred) {
|
||||||
|
endRoot = endRoot->forwardTo;
|
||||||
|
}
|
||||||
beginNode->entryPresent = true;
|
beginNode->entryPresent = true;
|
||||||
}
|
}
|
||||||
beginNode->entry.pointVersion = writeVersion;
|
beginNode->entry.pointVersion = writeVersion;
|
||||||
|
|
||||||
while (endRoot->releaseDeferred) {
|
|
||||||
endRoot = endRoot->forwardTo;
|
|
||||||
}
|
|
||||||
Node *endNode =
|
Node *endNode =
|
||||||
*insert(&getInTree(endRoot, impl), end, writeVersion, writeContext);
|
*insert(&getInTree(endRoot, impl), end, writeVersion, writeContext);
|
||||||
|
|
||||||
@@ -4915,6 +4915,10 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
|||||||
context.results[i].remaining, writeVersion,
|
context.results[i].remaining, writeVersion,
|
||||||
&writeContext);
|
&writeContext);
|
||||||
} else {
|
} else {
|
||||||
|
while (context.results[i].endInsertionPoint->releaseDeferred) {
|
||||||
|
context.results[i].endInsertionPoint =
|
||||||
|
context.results[i].endInsertionPoint->forwardTo;
|
||||||
|
}
|
||||||
auto [beginNode, endNode] = addWriteRange(
|
auto [beginNode, endNode] = addWriteRange(
|
||||||
context.results[i].insertionPoint, context.results[i].remaining,
|
context.results[i].insertionPoint, context.results[i].remaining,
|
||||||
context.results[i].endInsertionPoint,
|
context.results[i].endInsertionPoint,
|
||||||
|
Reference in New Issue
Block a user