From e6c4eda1569be0ba772c8873f8c05ccd4571a3d3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 16 Jun 2013 15:30:16 -0700 Subject: [PATCH 01/15] Don't arm the deadlock detector in standalone mode. --- src/cpp/ripple/ripple_Application.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/ripple_Application.cpp b/src/cpp/ripple/ripple_Application.cpp index 27614f93b1..b227d70114 100644 --- a/src/cpp/ripple/ripple_Application.cpp +++ b/src/cpp/ripple/ripple_Application.cpp @@ -600,7 +600,9 @@ void Application::run () boost::thread (boost::bind (runIO, boost::ref (mIOService))).detach (); } - theApp->getLoadManager ().arm (); + if (!theConfig.RUN_STANDALONE) + theApp->getLoadManager ().arm (); + mIOService.run (); // This blocks if (mWSPublicDoor) From b1aa893b59233a74f9259d2900fca615c142e1b5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Jun 2013 13:26:18 -0700 Subject: [PATCH 02/15] Don't send redundant fetch requests. --- src/cpp/ripple/ripple_LedgerAcquire.cpp | 9 +++++---- src/cpp/ripple/ripple_LedgerAcquire.h | 2 -- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/ripple_LedgerAcquire.cpp b/src/cpp/ripple/ripple_LedgerAcquire.cpp index 125241154e..9636895c9e 100644 --- a/src/cpp/ripple/ripple_LedgerAcquire.cpp +++ b/src/cpp/ripple/ripple_LedgerAcquire.cpp @@ -284,8 +284,7 @@ void LedgerAcquire::trigger (Peer::ref peer) if ((mWaitCount > 0) && peer) { - mRecentPeers.push_back (peer->getPeerId ()); - WriteLog (lsTRACE, LedgerAcquire) << "Deferring peer"; + WriteLog (lsTRACE, LedgerAcquire) << "Skipping peer"; return; } @@ -396,6 +395,7 @@ void LedgerAcquire::trigger (Peer::ref peer) * (tmGL.add_nodeids ()) = SHAMapNode ().getRawString (); WriteLog (lsTRACE, LedgerAcquire) << "Sending TX root request to " << (peer ? "selected peer" : "all peers"); sendRequest (tmGL, peer); + return; } else { @@ -433,6 +433,7 @@ void LedgerAcquire::trigger (Peer::ref peer) WriteLog (lsTRACE, LedgerAcquire) << "Sending TX node " << nodeIDs.size () << " request to " << (peer ? "selected peer" : "all peers"); sendRequest (tmGL, peer); + return; } } } @@ -449,6 +450,7 @@ void LedgerAcquire::trigger (Peer::ref peer) * (tmGL.add_nodeids ()) = SHAMapNode ().getRawString (); WriteLog (lsTRACE, LedgerAcquire) << "Sending AS root request to " << (peer ? "selected peer" : "all peers"); sendRequest (tmGL, peer); + return; } else { @@ -485,13 +487,12 @@ void LedgerAcquire::trigger (Peer::ref peer) << " request to " << (peer ? "selected peer" : "all peers"); CondLog (nodeIDs.size () == 1, lsTRACE, LedgerAcquire) << "AS node: " << nodeIDs[0]; sendRequest (tmGL, peer); + return; } } } } - mRecentPeers.clear (); - if (mComplete || mFailed) { WriteLog (lsDEBUG, LedgerAcquire) << "Done:" << (mComplete ? " complete" : "") << (mFailed ? " failed " : " ") diff --git a/src/cpp/ripple/ripple_LedgerAcquire.h b/src/cpp/ripple/ripple_LedgerAcquire.h index 487e9a425b..6c691bab8b 100644 --- a/src/cpp/ripple/ripple_LedgerAcquire.h +++ b/src/cpp/ripple/ripple_LedgerAcquire.h @@ -109,8 +109,6 @@ private: std::set mRecentTXNodes; std::set mRecentASNodes; - std::vector mRecentPeers; - std::vector > mOnComplete; }; From 430d08958c4d098b7f12c855beb095f587f61c1f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 09:36:47 -0700 Subject: [PATCH 03/15] Rate limit compactions with a 25ms pause after each complete file. --- src/cpp/leveldb/db/db_impl.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cpp/leveldb/db/db_impl.cc b/src/cpp/leveldb/db/db_impl.cc index cd765c5234..359ab63c87 100644 --- a/src/cpp/leveldb/db/db_impl.cc +++ b/src/cpp/leveldb/db/db_impl.cc @@ -813,6 +813,10 @@ Status DBImpl::FinishCompactionOutputFile(CompactionState* compact, (unsigned long long) output_number, (unsigned long long) current_entries, (unsigned long long) current_bytes); + + // rate-limit compaction file creation + // with a 25ms pause + env_->SleepForMicroseconds(25000); } } return s; From 2a03b1f8ab0cff8331d50c85b5cc18ddf613e757 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 09:40:12 -0700 Subject: [PATCH 04/15] Don't do PoW until that code is completed. --- src/cpp/ripple/ripple_Peer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/ripple_Peer.cpp b/src/cpp/ripple/ripple_Peer.cpp index 648ad375e6..a0b4be803f 100644 --- a/src/cpp/ripple/ripple_Peer.cpp +++ b/src/cpp/ripple/ripple_Peer.cpp @@ -185,7 +185,6 @@ private: void doFetchPack (const boost::shared_ptr& packet); - // VFALCO NOTE why is this a static member instead of a regular member? static void doProofOfWork (Job&, boost::weak_ptr , ProofOfWork::pointer); }; @@ -1634,10 +1633,12 @@ void PeerImp::recvProofWork (ripple::TMProofWork& packet) return; } +#if 0 // Until proof of work is completed, don't do it theApp->getJobQueue ().addJob ( jtPROOFWORK, "recvProof->doProof", BIND_TYPE (&PeerImp::doProofOfWork, P_1, boost::weak_ptr (shared_from_this ()), pow)); +#endif return; } From 3523c52691f7d23bbcbb7d59d8d3d27359d9872c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 10:08:23 -0700 Subject: [PATCH 05/15] Don't crash on logrotate. --- modules/ripple_basics/utility/ripple_Log.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/ripple_basics/utility/ripple_Log.cpp b/modules/ripple_basics/utility/ripple_Log.cpp index 099edc78f9..c9a6701061 100644 --- a/modules/ripple_basics/utility/ripple_Log.cpp +++ b/modules/ripple_basics/utility/ripple_Log.cpp @@ -281,10 +281,13 @@ void Log::setLogFile (boost::filesystem::path const& path) outStream = newStream; - if (pathToLog != NULL) - delete pathToLog; + if (pathToLog != &path) + { + if (pathToLog != NULL) + delete pathToLog; - pathToLog = new boost::filesystem::path (path); + pathToLog = new boost::filesystem::path (path); + } } bool LogPartition::setSeverity (const std::string& partition, LogSeverity severity) From 8bb19e9c45b3695180c9c496a19bc5355c005b3f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 10:22:38 -0700 Subject: [PATCH 06/15] Persist the RPCServer object during the shutdown to avoid a crash. --- src/cpp/ripple/RPCServer.cpp | 18 +++++++++--------- src/cpp/ripple/RPCServer.h | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/RPCServer.cpp b/src/cpp/ripple/RPCServer.cpp index 8a2e084ff1..188beb9b8a 100644 --- a/src/cpp/ripple/RPCServer.cpp +++ b/src/cpp/ripple/RPCServer.cpp @@ -52,11 +52,6 @@ void RPCServer::handle_read_req (const boost::system::error_code& e) mStrand.wrap (boost::bind (&RPCServer::handle_write, shared_from_this (), boost::asio::placeholders::error))); } -static void dummy_handler () -{ - ; -} - void RPCServer::handle_read_line (const boost::system::error_code& e) { if (e) @@ -68,7 +63,7 @@ void RPCServer::handle_read_line (const boost::system::error_code& e) { // request with no body WriteLog (lsWARNING, RPCServer) << "RPC HTTP request with no body"; - mSocket.async_shutdown (boost::bind (&dummy_handler)); + mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); return; } else if (action == haREAD_LINE) @@ -84,7 +79,7 @@ void RPCServer::handle_read_line (const boost::system::error_code& e) if ((rLen < 0) || (rLen > RPC_MAXIMUM_QUERY)) { WriteLog (lsWARNING, RPCServer) << "Illegal RPC request length " << rLen; - mSocket.async_shutdown (boost::bind (&dummy_handler)); + mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); return; } @@ -105,7 +100,7 @@ void RPCServer::handle_read_line (const boost::system::error_code& e) } } else - mSocket.async_shutdown (boost::bind (&dummy_handler)); + mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); } std::string RPCServer::handleRequest (const std::string& requestStr) @@ -195,7 +190,7 @@ void RPCServer::handle_write (const boost::system::error_code& e) HTTPRequestAction action = mHTTPRequest.requestDone (false); if (action == haCLOSE_CONN) - mSocket.async_shutdown (boost::bind (&dummy_handler)); + mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); else { boost::asio::async_read_until (mSocket, mLineBuffer, "\r\n", @@ -209,4 +204,9 @@ void RPCServer::handle_write (const boost::system::error_code& e) } } +// nothing to do, we just keep the object alive +void RPCServer::handle_shutdown (const boost::system::error_code& e) +{ +} + // vim:ts=4 diff --git a/src/cpp/ripple/RPCServer.h b/src/cpp/ripple/RPCServer.h index 3ccc261f75..ebc262d5fe 100644 --- a/src/cpp/ripple/RPCServer.h +++ b/src/cpp/ripple/RPCServer.h @@ -35,6 +35,7 @@ private: void handle_write (const boost::system::error_code& ec); void handle_read_line (const boost::system::error_code& ec); void handle_read_req (const boost::system::error_code& ec); + void handle_shutdown (const boost::system::error_code& ec); std::string handleRequest (const std::string& requestStr); From f502126cd7de69a1ac6b4395ba4c625fcdcf05d3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 10:46:09 -0700 Subject: [PATCH 07/15] Correctly detect a malformed currency. --- src/cpp/ripple/ripple_PathRequest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/ripple_PathRequest.cpp b/src/cpp/ripple/ripple_PathRequest.cpp index 180ec051c8..cfba2e9f51 100644 --- a/src/cpp/ripple/ripple_PathRequest.cpp +++ b/src/cpp/ripple/ripple_PathRequest.cpp @@ -182,7 +182,7 @@ int PathRequest::parseJson (const Json::Value& jvParams, bool complete) const Json::Value& jvCur = jvSrcCur[i]; uint160 uCur, uIss; - if (!jvCur.isMember ("currency") || !STAmount::currencyFromString (uCur, jvCur["currency"].asString ())) + if (!jvCur.isArray() || !jvCur.isMember ("currency") || !STAmount::currencyFromString (uCur, jvCur["currency"].asString ())) { jvStatus = rpcError (rpcSRC_CUR_MALFORMED); return PFR_PJ_INVALID; From 3b8201803785b2b43f982446fad9b1dc3eaef4a1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 10:52:21 -0700 Subject: [PATCH 08/15] Fix bug in regular key set transactions. --- src/cpp/ripple/RegularKeySetTransactor.cpp | 3 ++- src/cpp/ripple/Transactor.cpp | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/RegularKeySetTransactor.cpp b/src/cpp/ripple/RegularKeySetTransactor.cpp index 0250d3235c..f19a0cff53 100644 --- a/src/cpp/ripple/RegularKeySetTransactor.cpp +++ b/src/cpp/ripple/RegularKeySetTransactor.cpp @@ -3,7 +3,8 @@ SETUP_LOG (RegularKeySetTransactor) uint64 RegularKeySetTransactor::calculateBaseFee () { - if ( ! (mTxnAccount->getFlags () & lsfPasswordSpent) + if ( mTxnAccount + && (! (mTxnAccount->getFlags () & lsfPasswordSpent)) && (mSigningPubKey.getAccountID () == mTxnAccountID)) { // flag is armed and they signed with the right account diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index 98c9a152c9..929dc74820 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -200,11 +200,10 @@ TER Transactor::apply () if (terResult != tesSUCCESS) return (terResult); - calculateFee (); - boost::recursive_mutex::scoped_lock sl (mEngine->getLedger ()->mLock); mTxnAccount = mEngine->entryCache (ltACCOUNT_ROOT, Ledger::getAccountRootIndex (mTxnAccountID)); + calculateFee (); // Find source account // If are only forwarding, due to resource limitations, we might verifying only some transactions, this would be probabilistic. From 1530a05505e9a76ce34ecbd8128c0d1b7b1e2c81 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 11:51:31 -0700 Subject: [PATCH 09/15] Even though the handler doesn't do anything, it still has to be wrapped in a strand to protect the composed SSL shutdown handler. --- src/cpp/ripple/RPCServer.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/RPCServer.cpp b/src/cpp/ripple/RPCServer.cpp index 188beb9b8a..dc6794e270 100644 --- a/src/cpp/ripple/RPCServer.cpp +++ b/src/cpp/ripple/RPCServer.cpp @@ -63,7 +63,7 @@ void RPCServer::handle_read_line (const boost::system::error_code& e) { // request with no body WriteLog (lsWARNING, RPCServer) << "RPC HTTP request with no body"; - mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); + mSocket.async_shutdown (mStrand.wrap (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error))); return; } else if (action == haREAD_LINE) @@ -79,7 +79,7 @@ void RPCServer::handle_read_line (const boost::system::error_code& e) if ((rLen < 0) || (rLen > RPC_MAXIMUM_QUERY)) { WriteLog (lsWARNING, RPCServer) << "Illegal RPC request length " << rLen; - mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); + mSocket.async_shutdown (mStrand.wrap (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error))); return; } @@ -100,7 +100,7 @@ void RPCServer::handle_read_line (const boost::system::error_code& e) } } else - mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); + mSocket.async_shutdown (mStrand.wrap (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error))); } std::string RPCServer::handleRequest (const std::string& requestStr) @@ -190,7 +190,7 @@ void RPCServer::handle_write (const boost::system::error_code& e) HTTPRequestAction action = mHTTPRequest.requestDone (false); if (action == haCLOSE_CONN) - mSocket.async_shutdown (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error)); + mSocket.async_shutdown (mStrand.wrap (boost::bind (&RPCServer::handle_shutdown, shared_from_this(), boost::asio::placeholders::error))); else { boost::asio::async_read_until (mSocket, mLineBuffer, "\r\n", From 325f4ce14853e47d777ee35241f314540df3d87c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Jun 2013 17:56:22 -0700 Subject: [PATCH 10/15] On account->account->account issue->issue, don't issue if we shouldn't issue. --- src/cpp/ripple/RippleCalc.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/RippleCalc.cpp b/src/cpp/ripple/RippleCalc.cpp index f6b575523d..f01f72cbf3 100644 --- a/src/cpp/ripple/RippleCalc.cpp +++ b/src/cpp/ripple/RippleCalc.cpp @@ -1800,7 +1800,7 @@ void RippleCalc::calcNodeRipple ( % saPrvAct % saCurAct); - assert (saCurReq.isPositive ()); + assert (saCurReq.isPositive ()); // FIXME: saCurReq was zero assert (saPrvReq.getCurrency () == saCurReq.getCurrency ()); assert (saPrvReq.getCurrency () == saPrvAct.getCurrency ()); assert (saPrvReq.getIssuer () == saPrvAct.getIssuer ()); @@ -2425,7 +2425,8 @@ TER RippleCalc::calcNodeAccountFwd ( // Previous issue part 2 : issue -> issue if (saPrvIssueReq != saPrvIssueAct // Previous wants to issue. - && saCurRedeemReq == saCurRedeemAct) // Current redeeming is done can issue. + && saCurRedeemReq == saCurRedeemAct // Current redeeming is done can issue. + && saCurIssueReq) // Current wants to issue. { // Rate: quality in : 1.0 calcNodeRipple (uQualityIn, QUALITY_ONE, saPrvIssueReq, saCurIssueReq, saPrvIssueAct, saCurIssueAct, uRateMax); From e861b36987ae6cbdc46a1bf77bf864943107866a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Jun 2013 11:43:28 -0700 Subject: [PATCH 11/15] Adjust some logging priorities. --- src/cpp/ripple/RPCServer.cpp | 4 ++-- src/cpp/ripple/SNTPClient.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/RPCServer.cpp b/src/cpp/ripple/RPCServer.cpp index dc6794e270..502c4d62dd 100644 --- a/src/cpp/ripple/RPCServer.cpp +++ b/src/cpp/ripple/RPCServer.cpp @@ -160,10 +160,10 @@ std::string RPCServer::handleRequest (const std::string& requestStr) RPCHandler mRPCHandler (mNetOps); - WriteLog (lsTRACE, RPCServer) << valParams; + WriteLog (lsINFO, RPCServer) << valParams; int cost = 10; Json::Value result = mRPCHandler.doRpcCommand (strMethod, valParams, mRole, cost); - WriteLog (lsTRACE, RPCServer) << result; + WriteLog (lsINFO, RPCServer) << result; std::string strReply = JSONRPCReply (result, Json::Value (), id); return HTTPReply (200, strReply); diff --git a/src/cpp/ripple/SNTPClient.cpp b/src/cpp/ripple/SNTPClient.cpp index 1d7a07a662..5080e28fe0 100644 --- a/src/cpp/ripple/SNTPClient.cpp +++ b/src/cpp/ripple/SNTPClient.cpp @@ -244,7 +244,7 @@ bool SNTPClient::doQuery () if (best == mServers.end ()) { - WriteLog (lsINFO, SNTPClient) << "SNTP: No server to query"; + WriteLog (lsTRACE, SNTPClient) << "SNTP: No server to query"; return false; } From 34a616dbdb46581ea4be420696d0290882721a8d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Jun 2013 14:20:26 -0700 Subject: [PATCH 12/15] Always set uRateMax --- src/cpp/ripple/RippleCalc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/RippleCalc.cpp b/src/cpp/ripple/RippleCalc.cpp index f01f72cbf3..a6e5d55953 100644 --- a/src/cpp/ripple/RippleCalc.cpp +++ b/src/cpp/ripple/RippleCalc.cpp @@ -1870,9 +1870,9 @@ void RippleCalc::calcNodeRipple ( saCurAct += saCurOut; saPrvAct = saPrvReq; - if (!uRateMax) - uRateMax = uRate; } + if (!uRateMax) + uRateMax = uRate; } } From ff1b7e70f7b8bdb4816d9d991aa1d62fb5d17670 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 21 Jun 2013 19:37:55 -0700 Subject: [PATCH 13/15] Fix a bug that causes a crash on getCurrentSnapshot. --- src/cpp/ripple/RPCHandler.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 9c7a76714a..f99f86b374 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -67,8 +67,6 @@ RPCHandler::RPCHandler (NetworkOPs* netOps, InfoSub::pointer infoSub) : mNetOps Json::Value RPCHandler::transactionSign (Json::Value jvRequest, bool bSubmit, ScopedLock& mlh) { - mlh.unlock (); - Json::Value jvResult; RippleAddress naSeed; RippleAddress raSrcAddressID; @@ -111,6 +109,7 @@ Json::Value RPCHandler::transactionSign (Json::Value jvRequest, bool bSubmit, Sc AccountState::pointer asSrc = bOffline ? AccountState::pointer () // Don't look up address if offline. : mNetOps->getAccountState (mNetOps->getCurrentSnapshot (), raSrcAddressID); + mlh.unlock(); if (!bOffline && !asSrc) { From 5f81c7c10fc78abfbb026a1f8167e1efa8755776 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Jun 2013 19:53:57 -0700 Subject: [PATCH 14/15] Reduce exceptions during syncing. --- src/cpp/ripple/ripple_SHAMapSync.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/ripple_SHAMapSync.cpp b/src/cpp/ripple/ripple_SHAMapSync.cpp index 393b618850..61ec0f921c 100644 --- a/src/cpp/ripple/ripple_SHAMapSync.cpp +++ b/src/cpp/ripple/ripple_SHAMapSync.cpp @@ -322,11 +322,8 @@ SHAMapAddNode SHAMap::addKnownNode (const SHAMapNode& node, Blob const& rawNode, if (fullBelowCache.isPresent (iNode->getChildHash (branch))) return SHAMapAddNode::okay (); - try - { - iNode = getNodePointer (iNode->getChildNodeID (branch), iNode->getChildHash (branch), filter); - } - catch (SHAMapMissingNode&) + SHAMapTreeNode *nextNode = getNodePointerNT (iNode->getChildNodeID (branch), iNode->getChildHash (branch), filter); + if (!nextNode) { if (iNode->getDepth () != (node.getDepth () - 1)) { @@ -356,6 +353,7 @@ SHAMapAddNode SHAMap::addKnownNode (const SHAMapNode& node, Blob const& rawNode, mTNByID[node] = newNode; return SHAMapAddNode::useful (); } + iNode = nextNode; } WriteLog (lsTRACE, SHAMap) << "got node, already had it (late)"; From fe557e69c9260b4ec52e0ac2f40a64398bc3bddd Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Jun 2013 00:54:07 -0700 Subject: [PATCH 15/15] Cosmetic cleanup. --- src/cpp/ripple/ripple_LedgerAcquire.cpp | 26 ++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/ripple_LedgerAcquire.cpp b/src/cpp/ripple/ripple_LedgerAcquire.cpp index 9636895c9e..e04e0588a0 100644 --- a/src/cpp/ripple/ripple_LedgerAcquire.cpp +++ b/src/cpp/ripple/ripple_LedgerAcquire.cpp @@ -482,7 +482,9 @@ void LedgerAcquire::trigger (Peer::ref peer) { tmGL.set_itype (ripple::liAS_NODE); BOOST_FOREACH (SHAMapNode & it, nodeIDs) - * (tmGL.add_nodeids ()) = it.getRawString (); + { + * (tmGL.add_nodeids ()) = it.getRawString (); + } WriteLog (lsTRACE, LedgerAcquire) << "Sending AS node " << nodeIDs.size () << " request to " << (peer ? "selected peer" : "all peers"); CondLog (nodeIDs.size () == 1, lsTRACE, LedgerAcquire) << "AS node: " << nodeIDs[0]; @@ -613,8 +615,10 @@ void LedgerAcquire::filterNodes (std::vector& nodeIDs, std::vector LedgerAcquire::getNeededHashes () AccountStateSF filter (mLedger->getLedgerSeq ()); std::vector v = mLedger->getNeededAccountStateHashes (4, &filter); BOOST_FOREACH (uint256 const & h, v) - ret.push_back (std::make_pair (ripple::TMGetObjectByHash::otSTATE_NODE, h)); + { + ret.push_back (std::make_pair (ripple::TMGetObjectByHash::otSTATE_NODE, h)); + } } if (!mHaveTransactions) @@ -818,7 +824,9 @@ std::vector LedgerAcquire::getNeededHashes () TransactionStateSF filter (mLedger->getLedgerSeq ()); std::vector v = mLedger->getNeededAccountStateHashes (4, &filter); BOOST_FOREACH (uint256 const & h, v) - ret.push_back (std::make_pair (ripple::TMGetObjectByHash::otTRANSACTION_NODE, h)); + { + ret.push_back (std::make_pair (ripple::TMGetObjectByHash::otTRANSACTION_NODE, h)); + } } return ret; @@ -849,7 +857,9 @@ Json::Value LedgerAcquire::getJson (int) Json::Value hv (Json::arrayValue); std::vector v = mLedger->peekAccountStateMap ()->getNeededHashes (16, NULL); BOOST_FOREACH (uint256 const & h, v) - hv.append (h.GetHex ()); + { + hv.append (h.GetHex ()); + } ret["needed_state_hashes"] = hv; } @@ -858,7 +868,9 @@ Json::Value LedgerAcquire::getJson (int) Json::Value hv (Json::arrayValue); std::vector v = mLedger->peekTransactionMap ()->getNeededHashes (16, NULL); BOOST_FOREACH (uint256 const & h, v) - hv.append (h.GetHex ()); + { + hv.append (h.GetHex ()); + } ret["needed_transaction_hashes"] = hv; }