Fix a case where the AcceptedLedger constructor throws

This commit is contained in:
JoelKatz
2013-09-26 15:19:26 -07:00
parent d683b47dee
commit d10dba6b2e
3 changed files with 22 additions and 1 deletions

View File

@@ -576,7 +576,20 @@ void Ledger::saveValidatedLedger (bool current)
getApp().getNodeStore ().store (hotLEDGER, mLedgerSeq, s.modData (), mHash);
}
AcceptedLedger::pointer aLedger = AcceptedLedger::makeAcceptedLedger (shared_from_this ());
AcceptedLedger::pointer aLedger;
try
{
aLedger = AcceptedLedger::makeAcceptedLedger (shared_from_this ());
}
catch (...)
{
WriteLog (lsWARNING, Ledger) << "An accepted ledger was missing nodes";
getApp().getLedgerMaster().failedSave(mLedgerSeq, mHash);
{ // Clients can now trust the database for information about this ledger sequence
StaticScopedLockType sl (sPendingSaveLock, __FILE__, __LINE__);
sPendingSaves.erase(getLedgerSeq());
}
}
{
DeprecatedScopedLock sl (getApp().getLedgerDB ()->getDBLock ());

View File

@@ -532,6 +532,12 @@ void LedgerMaster::setFullLedger (Ledger::pointer ledger, bool isSynchronous, bo
//--------------------------------------------------------------------------
}
void LedgerMaster::failedSave(uint32 seq, uint256 const& hash)
{
clearLedger(seq);
getApp().getInboundLedgers().findCreate(hash, seq, true);
}
void LedgerMaster::checkAccept (uint256 const& hash)
{
Ledger::pointer ledger = mLedgerHistory.getLedgerByHash (hash);

View File

@@ -119,6 +119,8 @@ public:
void switchLedgers (Ledger::pointer lastClosed, Ledger::pointer newCurrent);
void failedSave(uint32 seq, uint256 const& hash);
std::string getCompleteLedgers ()
{
ScopedLockType sl (mCompleteLock, __FILE__, __LINE__);