From c26726eff3f16f6e319b9965273d69926d862f04 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 11 Mar 2013 09:19:54 -0700 Subject: [PATCH] Bugfix for ledger acquired but not written to database with txns. --- src/cpp/ripple/LedgerMaster.cpp | 8 +++++++- src/cpp/ripple/LedgerMaster.h | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index c834b4f42..508db1dea 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -356,7 +356,7 @@ void LedgerMaster::fixMismatch(Ledger::ref ledger) tLog(invalidate != 0, lsWARNING) << "All " << invalidate << " prior ledgers invalidated"; } -void LedgerMaster::setFullLedger(Ledger::ref ledger) +void LedgerMaster::setFullLedger(Ledger::pointer ledger) { // A new ledger has been accepted as part of the trusted chain cLog(lsDEBUG) << "Ledger " << ledger->getLedgerSeq() << " accepted :" << ledger->getHash(); @@ -364,6 +364,12 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) mCompleteLedgers.setValue(ledger->getLedgerSeq()); + if (Ledger::getHashByIndex(ledger->getLedgerSeq()) != ledger->getHash()) + { + ledger->pendSave(false); + return; + } + if ((ledger->getLedgerSeq() != 0) && mCompleteLedgers.hasValue(ledger->getLedgerSeq() - 1)) { // we think we have the previous ledger, double check Ledger::pointer prevLedger = getLedgerBySeq(ledger->getLedgerSeq() - 1); diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 496d7962e..d00825441 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -84,7 +84,7 @@ public: void pushLedger(Ledger::pointer newLCL, Ledger::pointer newOL, bool fromConsensus); void storeLedger(Ledger::pointer); - void setFullLedger(Ledger::ref ledger); + void setFullLedger(Ledger::pointer ledger); void switchLedgers(Ledger::pointer lastClosed, Ledger::pointer newCurrent);