diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index 6bc488ae0..38af55383 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -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::disarmDirty() { // stop saving dirty nodes + boost::recursive_mutex::scoped_lock sl(mLock); + boost::shared_ptr ret; ret.swap(mDirtyNodes); return ret; @@ -812,7 +818,6 @@ boost::shared_ptr SHAMap::disarmDirty() SHAMapTreeNode::pointer SHAMap::getNode(const SHAMapNode& nodeID) { - boost::recursive_mutex::scoped_lock sl(mLock); SHAMapTreeNode::pointer node = checkCacheNode(nodeID); if (node) diff --git a/src/cpp/ripple/SHAMapNodes.cpp b/src/cpp/ripple/SHAMapNodes.cpp index 31dc4441e..f7efa455c 100644 --- a/src/cpp/ripple/SHAMapNodes.cpp +++ b/src/cpp/ripple/SHAMapNodes.cpp @@ -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(*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) : diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 2ccde27f2..a06f3a471 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -61,6 +61,7 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vector nodeData; if (filter->haveNode(childID, childHash, nodeData)) { + assert(mSeq >= 1); SHAMapTreeNode::pointer ptr = boost::make_shared(childID, nodeData, mSeq - 1, snfPREFIX, childHash); cLog(lsTRACE) << "Got sync node from cache: " << *ptr; @@ -204,7 +205,9 @@ SMAddNode SHAMap::addRootNode(const std::vector& rootNode, SHANod return SMAddNode::okay(); } - SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, mSeq - 1, format, uint256()); + assert(mSeq >= 1); + SHAMapTreeNode::pointer node = + boost::make_shared(SHAMapNode(), rootNode, mSeq - 1, format, uint256()); if (!node) return SMAddNode::invalid(); @@ -242,7 +245,9 @@ SMAddNode SHAMap::addRootNode(const uint256& hash, const std::vector(SHAMapNode(), rootNode, mSeq - 1, format, uint256()); + assert(mSeq >= 1); + SHAMapTreeNode::pointer node = + boost::make_shared(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(node, rawNode, mSeq - 1, snfWIRE, uint256()); + assert(mSeq >= 1); + SHAMapTreeNode::pointer newNode = + boost::make_shared(node, rawNode, mSeq - 1, snfWIRE, uint256()); if (hash != newNode->getNodeHash()) // these aren't the droids we're looking for return SMAddNode::invalid();