summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-06-08 13:50:01 +0200
committerTor Egge <Tor.Egge@online.no>2023-06-08 13:50:01 +0200
commit64dda5829aa045e79c514e1dbf909234e5f67190 (patch)
treecac7872ca542cbdaee4c7822fefc741e2cb3082a /vespalib
parenteae78b80d5d94e4cff9eb112637be20eb998712d (diff)
Remove unneeded atomic thread fences.
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/vespa/vespalib/btree/btreeiterator.hpp28
-rw-r--r--vespalib/src/vespa/vespalib/btree/btreenodeallocator.hpp6
2 files changed, 7 insertions, 27 deletions
diff --git a/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp b/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp
index 5884bb2849b..b7927feaa1a 100644
--- a/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp
+++ b/vespalib/src/vespa/vespalib/btree/btreeiterator.hpp
@@ -951,10 +951,8 @@ moveFirstLeafNode(BTreeNode::Ref rootRef)
BTreeNode::Ref newRootRef = rootRef;
assert(_leaf.getNode() == allocator.mapLeafRef(rootRef));
if (allocator.getCompacting(rootRef)) {
- LeafNodeTypeRefPair lPair(allocator.moveLeafNode(_leaf.getNode()));
+ auto lPair = allocator.moveLeafNode(_leaf.getNode());
_leaf.setNode(lPair.data);
- // Before updating root
- std::atomic_thread_fence(std::memory_order_release);
newRootRef = lPair.ref;
}
_leaf.setIdx(_leaf.getNode()->validSlots() - 1);
@@ -967,9 +965,8 @@ moveFirstLeafNode(BTreeNode::Ref rootRef)
--level;
InternalNodeType *node = _path[level].getWNode();
assert(node == allocator.mapInternalRef(rootRef));
- bool moved = allocator.getCompacting(rootRef);
- if (moved) {
- InternalNodeTypeRefPair iPair(allocator.moveInternalNode(node));
+ if (allocator.getCompacting(rootRef)) {
+ auto iPair = allocator.moveInternalNode(node);
newRootRef = iPair.ref;
node = iPair.data;
}
@@ -980,28 +977,19 @@ moveFirstLeafNode(BTreeNode::Ref rootRef)
InternalNodeType *pnode = node;
node = allocator.mapInternalRef(nodeRef);
if (allocator.getCompacting(nodeRef)) {
- InternalNodeTypeRefPair iPair = allocator.moveInternalNode(node);
+ auto iPair = allocator.moveInternalNode(node);
nodeRef = iPair.ref;
node = iPair.data;
- std::atomic_thread_fence(std::memory_order_release);
pnode->setChild(0, nodeRef);
- moved = true;
}
_path[level].setNodeAndIdx(node, 0u);
}
EntryRef nodeRef = node->getChild(0);
_leaf.setNode(allocator.mapLeafRef(nodeRef));
if (allocator.getCompacting(nodeRef)) {
- LeafNodeTypeRefPair
- lPair(allocator.moveLeafNode(_leaf.getNode()));
+ auto lPair = allocator.moveLeafNode(_leaf.getNode());
_leaf.setNode(lPair.data);
- std::atomic_thread_fence(std::memory_order_release);
node->setChild(0, lPair.ref);
- moved = true;
- }
- if (moved) {
- // Before updating root
- std::atomic_thread_fence(std::memory_order_release);
}
_leaf.setIdx(_leaf.getNode()->validSlots() - 1);
return newRootRef;
@@ -1034,10 +1022,9 @@ moveNextLeafNode()
InternalNodeType *pnode = node;
node = allocator.mapInternalRef(nodeRef);
if (allocator.getCompacting(nodeRef)) {
- InternalNodeTypeRefPair iPair(allocator.moveInternalNode(node));
+ auto iPair = allocator.moveInternalNode(node);
nodeRef = iPair.ref;
node = iPair.data;
- std::atomic_thread_fence(std::memory_order_release);
pnode->setChild(idx, nodeRef);
}
idx = 0;
@@ -1046,9 +1033,8 @@ moveNextLeafNode()
EntryRef nodeRef = node->getChild(idx);
_leaf.setNode(allocator.mapLeafRef(nodeRef));
if (allocator.getCompacting(nodeRef)) {
- LeafNodeTypeRefPair lPair(allocator.moveLeafNode(_leaf.getNode()));
+ auto lPair = allocator.moveLeafNode(_leaf.getNode());
_leaf.setNode(lPair.data);
- std::atomic_thread_fence(std::memory_order_release);
node->setChild(idx, lPair.ref);
}
_leaf.setIdx(_leaf.getNode()->validSlots() - 1);
diff --git a/vespalib/src/vespa/vespalib/btree/btreenodeallocator.hpp b/vespalib/src/vespa/vespalib/btree/btreenodeallocator.hpp
index d23c8fc2054..ce0e603b664 100644
--- a/vespalib/src/vespa/vespalib/btree/btreenodeallocator.hpp
+++ b/vespalib/src/vespa/vespalib/btree/btreenodeallocator.hpp
@@ -209,10 +209,6 @@ freeze()
}
_leafToFreeze.clear();
}
-
- // Tree node freezes must be visible before tree freezes to
- // ensure that readers see a frozen world
- std::atomic_thread_fence(std::memory_order_release);
}
// Freeze trees.
@@ -222,8 +218,6 @@ freeze()
i->freeze(*this);
}
_treeToFreeze.clear();
- // Tree freezes must be visible before held nodes are freed
- std::atomic_thread_fence(std::memory_order_release);
}