diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-06-08 13:50:01 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-06-08 13:50:01 +0200 |
commit | 64dda5829aa045e79c514e1dbf909234e5f67190 (patch) | |
tree | cac7872ca542cbdaee4c7822fefc741e2cb3082a /vespalib/src | |
parent | eae78b80d5d94e4cff9eb112637be20eb998712d (diff) |
Remove unneeded atomic thread fences.
Diffstat (limited to 'vespalib/src')
-rw-r--r-- | vespalib/src/vespa/vespalib/btree/btreeiterator.hpp | 28 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/btree/btreenodeallocator.hpp | 6 |
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); } |