diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 9ddd185..f737141 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2944,16 +2944,14 @@ void addWriteRange(Node *&root, std::span begin, auto *p = nextLogical(endNode); endNode->entry.pointVersion = p == nullptr ? tls->zero : std::max(p->entry.rangeVersion, tls->zero); + if (beginIsPrefix) { + // beginNode may have been invalidated when inserting end + beginNode = *useAsRoot; + assert(beginNode->entryPresent); + } } endNode->entry.rangeVersion = writeVersion; - if (beginIsPrefix && insertedEnd) { - // beginNode may have been invalidated when inserting end. TODO can we do - // better? - beginNode = *insert(useAsRoot, begin, writeVersion, tls, impl); - assert(beginNode->entryPresent); - } - for (beginNode = nextLogical(beginNode); beginNode != endNode; beginNode = erase(beginNode, tls, impl, /*logical*/ true, endNode)) { }