From fbd52924786f635ed6df9d31090c75d5f42de128 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Thu, 9 May 2024 13:42:42 -0700 Subject: [PATCH] Fix thread safety issue --- VersionedMap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/VersionedMap.cpp b/VersionedMap.cpp index 8053648..4504bc0 100644 --- a/VersionedMap.cpp +++ b/VersionedMap.cpp @@ -530,7 +530,7 @@ struct VersionedMap::Impl { int len; }; - Finger search(Key key, int64_t at) const { + template Finger search(Key key, int64_t at) const { Finger finger; bool ignored; finger.push(latestRoot, ignored); @@ -546,8 +546,7 @@ struct VersionedMap::Impl { // No duplicates break; } - finger.push(child(n, c > 0, latestVersion), - c > 0); + finger.push(child(n, c > 0, latestVersion), c > 0); } return finger; } @@ -745,7 +744,8 @@ struct VersionedMap::Impl { case Clear: { insert({m.param1, m.param1Len}, {{nullptr, -1}}); if (m.param2Len > 0) { - auto iter = search({m.param1, m.param1Len}, latestVersion); + auto iter = search({m.param1, m.param1Len}, + latestVersion); move(iter, latestVersion, true); while (iter.searchPathSize() > 0 && mm.base[iter.backNode()] < Key{m.param2, m.param2Len}) { @@ -925,7 +925,7 @@ void VersionedMap::Impl::firstGeq(const Key *key, const int64_t *version, // TODO ILP! for (int i = 0; i < count; ++i) { // TODO re-use root if passed-in iterator version matches - auto finger = search(key[i], version[i]); + auto finger = search(key[i], version[i]); if (iterator[i].impl != nullptr) { iterator[i].impl->~Impl(); }