From 176df61321444e3fecf92380d074effa7ea1368a Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Wed, 14 Aug 2024 14:26:13 -0700 Subject: [PATCH] Simplify handling of beginNode invalidation if begin is prefix of end --- ConflictSet.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) 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)) { }