aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-12-05 18:38:23 +0100
committerGitHub <noreply@github.com>2021-12-05 18:38:23 +0100
commit3ad5494db4fa43e746595ef0005c80454e5b2f6e (patch)
treefc22b6d866dbfd62864b6b8b51025ca828c9062b
parent2d119b217018e991963799c6e324fb761521a6ba (diff)
parent905869ca1831211332e84f21913cc470957a95d8 (diff)
Merge pull request #20367 from vespa-engine/toregge/add-memory-fence-to-b-tree-compaction
Ensure that moved b-tree node is visible for readers before updating
-rw-r--r--vespalib/src/vespa/vespalib/btree/btreeiterator.hpp2
1 files changed, 2 insertions, 0 deletions
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;
}