diff --git a/modules/ripple_app/ledger/LedgerMaster.cpp b/modules/ripple_app/ledger/LedgerMaster.cpp index f56b37e23b..357ba239b5 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 481e92d2ea..2989b07817 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;