diff --git a/Facade.h b/Facade.h index b13b8e1..02b4bdb 100644 --- a/Facade.h +++ b/Facade.h @@ -29,12 +29,6 @@ struct Facade { const int64_t v[] = {version, version}; facade->versioned.firstGeq(key, v, versionedIter, 2); - if (versionedIter[0] == versionedIter[1]) { - // No mutations intersect [begin, end) - facade->unversionedRead(begin, end, limit, reverse, result); - return result; - } - // Make sure versionedIter[1] param1 is >= `end` if (versionedIter[1] != facade->versioned.end(version)) { auto m = *versionedIter[1]; @@ -43,6 +37,12 @@ struct Facade { } } + if (versionedIter[0] == versionedIter[1]) { + // No mutations intersect [begin, end) + facade->unversionedRead(begin, end, limit, reverse, result); + return result; + } + static const uint8_t zero_[] = {0}; static const String zero{zero_, 1}; diff --git a/VersionedMap.cpp b/VersionedMap.cpp index 25eae08..fb2132f 100644 --- a/VersionedMap.cpp +++ b/VersionedMap.cpp @@ -653,7 +653,14 @@ struct __attribute__((__visibility__("hidden"))) VersionedMap::Impl { rangeVersion = latestVersion; if (inserted) { val = {nullptr, -1}; // Sentinel for "no point mutation here" - pointVersion = -1; // Sentinel for "no point mutation here" + Finger copy; + finger.copyTo(copy); + move(copy, latestVersion, true); + if (copy.searchPathSize() == 0) { + pointVersion = -1; // Sentinel for "no mutation ending here" + } else { + pointVersion = mm.base[copy.backNode()].entry->rangeVersion; + } } else { auto *entry = mm.base[finger.backNode()].entry; val = {entry->getVal(), entry->valLen};