mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Some asserts to catch some possible causes of the SHAMap destructor crash.
This commit is contained in:
@@ -788,6 +788,8 @@ int SHAMap::flushDirty(SHADirtyMap& map, int maxNodes, HashedObjectType t, uint3
|
||||
// tLog(t == hotACCOUNT_NODE, lsDEBUG) << "STATE node write " << it->first;
|
||||
s.erase();
|
||||
it->second->addRaw(s, snfPREFIX);
|
||||
|
||||
#ifdef DEBUG
|
||||
if (s.getSHA512Half() != it->second->getNodeHash())
|
||||
{
|
||||
cLog(lsFATAL) << *(it->second);
|
||||
@@ -795,6 +797,8 @@ int SHAMap::flushDirty(SHADirtyMap& map, int maxNodes, HashedObjectType t, uint3
|
||||
cLog(lsFATAL) << s.getSHA512Half() << " != " << it->second->getNodeHash();
|
||||
assert(false);
|
||||
}
|
||||
#endif
|
||||
|
||||
theApp->getHashedObjectStore().store(t, seq, s.peekData(), it->second->getNodeHash());
|
||||
if (flushed++ >= maxNodes)
|
||||
return flushed;
|
||||
@@ -805,6 +809,8 @@ int SHAMap::flushDirty(SHADirtyMap& map, int maxNodes, HashedObjectType t, uint3
|
||||
|
||||
boost::shared_ptr<SHAMap::SHADirtyMap> SHAMap::disarmDirty()
|
||||
{ // stop saving dirty nodes
|
||||
boost::recursive_mutex::scoped_lock sl(mLock);
|
||||
|
||||
boost::shared_ptr<SHADirtyMap> ret;
|
||||
ret.swap(mDirtyNodes);
|
||||
return ret;
|
||||
@@ -812,7 +818,6 @@ boost::shared_ptr<SHAMap::SHADirtyMap> SHAMap::disarmDirty()
|
||||
|
||||
SHAMapTreeNode::pointer SHAMap::getNode(const SHAMapNode& nodeID)
|
||||
{
|
||||
boost::recursive_mutex::scoped_lock sl(mLock);
|
||||
|
||||
SHAMapTreeNode::pointer node = checkCacheNode(nodeID);
|
||||
if (node)
|
||||
|
||||
@@ -161,16 +161,12 @@ SHAMapTreeNode::SHAMapTreeNode(uint32 seq, const SHAMapNode& nodeID) : SHAMapNod
|
||||
}
|
||||
|
||||
SHAMapTreeNode::SHAMapTreeNode(const SHAMapTreeNode& node, uint32 seq) : SHAMapNode(node),
|
||||
mHash(node.mHash), mSeq(seq), mType(node.mType), mIsBranch(0), mFullBelow(false)
|
||||
mHash(node.mHash), mSeq(seq), mType(node.mType), mIsBranch(node.mIsBranch), mFullBelow(false)
|
||||
{
|
||||
if (node.mItem)
|
||||
mItem = boost::make_shared<SHAMapItem>(*node.mItem);
|
||||
else
|
||||
memcpy(mHashes, node.mHashes, sizeof(mHashes));
|
||||
|
||||
for (int i = 0; i < 16; ++i)
|
||||
if (mHashes[i].isNonZero())
|
||||
mIsBranch |= (1 << i);
|
||||
}
|
||||
|
||||
SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& node, SHAMapItem::ref item, TNType type, uint32 seq) :
|
||||
|
||||
@@ -61,6 +61,7 @@ void SHAMap::getMissingNodes(std::vector<SHAMapNode>& nodeIDs, std::vector<uint2
|
||||
std::vector<unsigned char> nodeData;
|
||||
if (filter->haveNode(childID, childHash, nodeData))
|
||||
{
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer ptr =
|
||||
boost::make_shared<SHAMapTreeNode>(childID, nodeData, mSeq - 1, snfPREFIX, childHash);
|
||||
cLog(lsTRACE) << "Got sync node from cache: " << *ptr;
|
||||
@@ -204,7 +205,9 @@ SMAddNode SHAMap::addRootNode(const std::vector<unsigned char>& rootNode, SHANod
|
||||
return SMAddNode::okay();
|
||||
}
|
||||
|
||||
SHAMapTreeNode::pointer node = boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uint256());
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer node =
|
||||
boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uint256());
|
||||
if (!node)
|
||||
return SMAddNode::invalid();
|
||||
|
||||
@@ -242,7 +245,9 @@ SMAddNode SHAMap::addRootNode(const uint256& hash, const std::vector<unsigned ch
|
||||
return SMAddNode::okay();
|
||||
}
|
||||
|
||||
SHAMapTreeNode::pointer node = boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uint256());
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer node =
|
||||
boost::make_shared<SHAMapTreeNode>(SHAMapNode(), rootNode, mSeq - 1, format, uint256());
|
||||
if (!node || node->getNodeHash() != hash)
|
||||
return SMAddNode::invalid();
|
||||
|
||||
@@ -319,7 +324,9 @@ SMAddNode SHAMap::addKnownNode(const SHAMapNode& node, const std::vector<unsigne
|
||||
return SMAddNode::invalid();
|
||||
}
|
||||
|
||||
SHAMapTreeNode::pointer newNode = boost::make_shared<SHAMapTreeNode>(node, rawNode, mSeq - 1, snfWIRE, uint256());
|
||||
assert(mSeq >= 1);
|
||||
SHAMapTreeNode::pointer newNode =
|
||||
boost::make_shared<SHAMapTreeNode>(node, rawNode, mSeq - 1, snfWIRE, uint256());
|
||||
if (hash != newNode->getNodeHash()) // these aren't the droids we're looking for
|
||||
return SMAddNode::invalid();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user