From a2f90da10c9fba2a118c3e17800152e2aa50d9f8 Mon Sep 17 00:00:00 2001 From: David Schwartz Date: Tue, 20 Aug 2013 10:51:38 -0700 Subject: [PATCH] Fix pathfinding aggressiveness logic. --- modules/ripple_app/ledger/LedgerMaster.cpp | 17 +++++++++-------- modules/ripple_app/ledger/LedgerMaster.h | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/modules/ripple_app/ledger/LedgerMaster.cpp b/modules/ripple_app/ledger/LedgerMaster.cpp index f56b37e23..357ba239b 100644 --- a/modules/ripple_app/ledger/LedgerMaster.cpp +++ b/modules/ripple_app/ledger/LedgerMaster.cpp @@ -680,7 +680,6 @@ void LedgerMaster::advanceThread() getApp().getOPs().clearNeedNetworkLedger(); - mPathFindNewLedger = true; if (!mPathFindThread) { mPathFindThread = true; @@ -832,26 +831,28 @@ void LedgerMaster::updatePaths () do { - bool newOnly = false; + bool newOnly = true; { boost::recursive_mutex::scoped_lock ml (mLock); - if (mPathFindNewLedger || (lastLedger && (lastLedger.get () != mPubLedger.get ()))) - lastLedger = mPubLedger; + if (!mPathLedger || (mPathLedger->getLedgerSeq() < mValidLedger->getLedgerSeq())) + { // We have a new valid ledger since the last full pathfinding + newOnly = false; + mPathLedger = mValidLedger; + lastLedger = mPathLedger; + } else if (mPathFindNewRequest) - { + { // We have a new request but no new ledger newOnly = true; lastLedger = boost::make_shared (boost::ref (*mCurrentLedger), false); } else - { + { // Nothing to do mPathFindThread = false; return; } - lastLedger = mPubLedger; - mPathFindNewLedger = false; mPathFindNewRequest = false; } diff --git a/modules/ripple_app/ledger/LedgerMaster.h b/modules/ripple_app/ledger/LedgerMaster.h index 481e92d2e..2989b0781 100644 --- a/modules/ripple_app/ledger/LedgerMaster.h +++ b/modules/ripple_app/ledger/LedgerMaster.h @@ -27,7 +27,6 @@ public: , mAdvanceThread (false) , mFillInProgress (false) , mPathFindThread (false) - , mPathFindNewLedger (false) , mPathFindNewRequest (false) { } @@ -203,9 +202,10 @@ private: Ledger::pointer mCurrentLedger; // The ledger we are currently processiong Ledger::pointer mCurrentSnapshot; // Snapshot of the current ledger - Ledger::pointer mClosedLedger; // The ledger that most recently closed + Ledger::pointer mClosedLedger; // The ledger that most recently closed Ledger::pointer mValidLedger; // The highest-sequence ledger we have fully accepted Ledger::pointer mPubLedger; // The last ledger we have published + Ledger::pointer mPathLedger; // The last ledger we did pathfinding against LedgerHistory mLedgerHistory;