diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 51e1d67..e2cfceb 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -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,