diff --git a/src/LedgerConsensus.cpp b/src/LedgerConsensus.cpp index 30c1b404f1..e3408ee76f 100644 --- a/src/LedgerConsensus.cpp +++ b/src/LedgerConsensus.cpp @@ -323,7 +323,10 @@ void LedgerConsensus::statusChange(newcoin::NodeEvent event, Ledger::pointer led { // Send a node status change message to our peers newcoin::TMStatusChange s; if (!mHaveCorrectLCL) + { + Log(lsTRACE) << "Telling peers we have lost sync"; s.set_newevent(newcoin::neLOST_SYNC); + } else { s.set_newevent(event); diff --git a/src/NetworkOPs.cpp b/src/NetworkOPs.cpp index 40b08da42f..0aac602b2d 100644 --- a/src/NetworkOPs.cpp +++ b/src/NetworkOPs.cpp @@ -372,8 +372,11 @@ bool NetworkOPs::checkLastClosedLedger(const std::vector& peerLis Ledger::pointer currentClosed = mLedgerMaster->getClosedLedger(); uint256 closedLedger = currentClosed->getHash(); ValidationCount& ourVC = ledgers[closedLedger]; - ++ourVC.nodesUsing; - ourVC.highNode = theApp->getWallet().getNodePublic(); + if (mHaveLCL) + { + ++ourVC.nodesUsing; + ourVC.highNode = theApp->getWallet().getNodePublic(); + } for (std::vector::const_iterator it = peerList.begin(), end = peerList.end(); it != end; ++it) { @@ -575,7 +578,10 @@ void NetworkOPs::endConsensus() std::vector peerList = theApp->getConnectionPool().getPeerVector(); for (std::vector::const_iterator it = peerList.begin(), end = peerList.end(); it != end; ++it) if (*it && ((*it)->getClosedLedgerHash() == deadLedger)) + { + Log(lsTRACE) << "Killing obsolete peer status"; (*it)->cycleStatus(); + } mConsensus = boost::shared_ptr(); } diff --git a/src/Peer.cpp b/src/Peer.cpp index 33c51dcc3b..24fb293882 100644 --- a/src/Peer.cpp +++ b/src/Peer.cpp @@ -857,8 +857,10 @@ void Peer::recvStatus(newcoin::TMStatusChange& packet) if (packet.newevent() == newcoin::neLOST_SYNC) { + Log(lsTRACE) << "peer has lost sync"; mPreviousLedgerHash.zero(); mClosedLedgerHash.zero(); + return; } if (packet.has_ledgerhash() && (packet.ledgerhash().size() == (256 / 8))) { // a peer has changed ledgers @@ -866,7 +868,12 @@ void Peer::recvStatus(newcoin::TMStatusChange& packet) mClosedLedgerTime = ptFromSeconds(packet.networktime()); Log(lsTRACE) << "peer LCL is " << mClosedLedgerHash.GetHex(); } - else mClosedLedgerHash.zero(); + else + { + Log(lsTRACE) << "peer has no ledger hash"; + mClosedLedgerHash.zero(); + } + if (packet.has_previousledgerhash() && packet.previousledgerhash().size() == (256 / 8)) { memcpy(mPreviousLedgerHash.begin(), packet.previousledgerhash().data(), 256 / 8); diff --git a/src/ValidationCollection.cpp b/src/ValidationCollection.cpp index 6761110b17..a1ed90546c 100644 --- a/src/ValidationCollection.cpp +++ b/src/ValidationCollection.cpp @@ -87,8 +87,8 @@ boost::unordered_map ValidationCollection::getCurrentValidations() { if (now > (it->second->getCloseTime() + LEDGER_INTERVAL)) { - it = mCurrentValidations.erase(it); Log(lsTRACE) << "Erasing validation for " << it->second->getLedgerHash().GetHex(); + it = mCurrentValidations.erase(it); } else {