Avoid deadlock.

This commit is contained in:
JoelKatz
2013-08-12 20:17:52 -07:00
parent 98d88c8ded
commit ae8969529d

View File

@@ -575,6 +575,7 @@ void LedgerMaster::advanceThread()
if ((missing != RangeSet::absent) && if ((missing != RangeSet::absent) &&
shouldAcquire(mValidLedger->getLedgerSeq(), getConfig().LEDGER_HISTORY, missing)) shouldAcquire(mValidLedger->getLedgerSeq(), getConfig().LEDGER_HISTORY, missing))
{ {
sl.unlock();
Ledger::pointer nextLedger = mLedgerHistory.getLedgerBySeq(missing + 1); Ledger::pointer nextLedger = mLedgerHistory.getLedgerBySeq(missing + 1);
if (nextLedger) if (nextLedger)
{ {
@@ -594,10 +595,8 @@ void LedgerMaster::advanceThread()
} }
if (ledger) if (ledger)
{ {
sl.unlock();
setFullLedger(ledger, false, false); setFullLedger(ledger, false, false);
tryFill(ledger); tryFill(ledger);
sl.lock();
progress = true; progress = true;
} }
} }
@@ -607,6 +606,9 @@ void LedgerMaster::advanceThread()
WriteLog (lsFATAL, LedgerMaster) << "Pub:" << mPubLedger->getLedgerSeq() << " Val:" << mValidLedger->getLedgerSeq(); WriteLog (lsFATAL, LedgerMaster) << "Pub:" << mPubLedger->getLedgerSeq() << " Val:" << mValidLedger->getLedgerSeq();
assert(false); assert(false);
} }
sl.lock();
if (mValidLedger->getLedgerSeq() != mPubLedger->getLedgerSeq())
progress = true;
} }
} }
else else