diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 90674d6e0..a54fc5f6d 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -252,6 +252,15 @@ boost::weak_ptr LedgerAcquire::pmDowncast() return boost::shared_polymorphic_downcast(shared_from_this()); } +static void LADispatch( + Job& job, + LedgerAcquire::pointer la, + std::vector< FUNCTION_TYPE > trig) +{ + for (unsigned int i = 0; i < trig.size(); ++i) + trig[i](la); +} + void LedgerAcquire::done() { if (mSignaled) @@ -282,9 +291,9 @@ void LedgerAcquire::done() else theApp->getMasterLedgerAcquire().logFailure(mHash); - // FIXME: We hold the PeerSet lock - for (unsigned int i = 0; i < triggers.size(); ++i) - triggers[i](shared_from_this()); + if (!triggers.empty()) // We hold the PeerSet lock, so must dispatch + theApp->getJobQueue().addJob(jtLEDGER_DATA, "triggers", + BIND_TYPE(LADispatch, P_1, shared_from_this(), triggers)); } bool LedgerAcquire::addOnComplete(FUNCTION_TYPE trigger)