From 905869ca1831211332e84f21913cc470957a95d8 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Sun, 5 Dec 2021 01:35:55 +0100 Subject: Ensure that moved b-tree node is visible for readers before updating reference in parent node. --- vespalib/src/vespa/vespalib/btree/btreeiterator.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp b/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp index 2348e770e9d..042779f1b1b 100644 --- a/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp +++ b/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp @@ -983,6 +983,7 @@ moveFirstLeafNode(BTreeNode::Ref rootRef) InternalNodeTypeRefPair iPair = allocator.moveInternalNode(node); nodeRef = iPair.ref; node = iPair.data; + std::atomic_thread_fence(std::memory_order_release); pnode->setChild(0, nodeRef); moved = true; } @@ -994,6 +995,7 @@ moveFirstLeafNode(BTreeNode::Ref rootRef) LeafNodeTypeRefPair lPair(allocator.moveLeafNode(_leaf.getNode())); _leaf.setNode(lPair.data); + std::atomic_thread_fence(std::memory_order_release); node->setChild(0, lPair.ref); moved = true; } -- cgit v1.2.3