Fix DataTree::key() when called while traversing
This commit is contained in:
parent
6ff0839e90
commit
f42e08a5f6
@ -40,14 +40,14 @@ namespace onblocks {
|
||||
namespace datatreestore {
|
||||
|
||||
DataTree::DataTree(DataNodeStore *nodeStore, unique_ref<DataNode> rootNode)
|
||||
: _mutex(), _nodeStore(nodeStore), _rootNode(std::move(rootNode)), _numLeavesCache(none) {
|
||||
: _mutex(), _nodeStore(nodeStore), _rootNode(std::move(rootNode)), _key(_rootNode->key()), _numLeavesCache(none) {
|
||||
}
|
||||
|
||||
DataTree::~DataTree() {
|
||||
}
|
||||
|
||||
const Key &DataTree::key() const {
|
||||
return _rootNode->key();
|
||||
return _key;
|
||||
}
|
||||
|
||||
void DataTree::flush() const {
|
||||
@ -58,6 +58,7 @@ void DataTree::flush() const {
|
||||
}
|
||||
|
||||
unique_ref<DataNode> DataTree::releaseRootNode() {
|
||||
unique_lock<shared_mutex> lock(_mutex); // Lock ensures that the root node is currently set (traversing unsets it temporarily)
|
||||
return std::move(_rootNode);
|
||||
}
|
||||
|
||||
@ -75,6 +76,7 @@ uint32_t DataTree::_numLeaves() const {
|
||||
}
|
||||
|
||||
uint32_t DataTree::_forceComputeNumLeaves() const {
|
||||
unique_lock<shared_mutex> lock(_mutex); // Lock ensures that the root node is currently set (traversing unsets it temporarily)
|
||||
_numLeavesCache = _computeNumLeaves(*_rootNode);
|
||||
return *_numLeavesCache;
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ private:
|
||||
mutable boost::shared_mutex _mutex;
|
||||
datanodestore::DataNodeStore *_nodeStore;
|
||||
cpputils::unique_ref<datanodestore::DataNode> _rootNode;
|
||||
blockstore::Key _key; // Key is stored in a member variable, since _rootNode is nullptr while traversing, but we still want to be able to return the key.
|
||||
mutable boost::optional<uint32_t> _numLeavesCache;
|
||||
|
||||
cpputils::unique_ref<datanodestore::DataNode> releaseRootNode();
|
||||
|
Loading…
Reference in New Issue
Block a user