diff --git a/src/cpp/ripple/PFRequest.cpp b/src/cpp/ripple/PFRequest.cpp index 74ec431c8a..743152d7c6 100644 --- a/src/cpp/ripple/PFRequest.cpp +++ b/src/cpp/ripple/PFRequest.cpp @@ -248,4 +248,47 @@ bool PFRequest::doUpdate(RLCache::ref cache, bool fast) return true; } +void PFRequest::updateAll(const boost::shared_ptr& ledger) +{ + assert(ledger->isImmutable()); + + std::set requests; + { + boost::recursive_mutex::scoped_lock sl(sLock); + requests = sRequests; + } + + if (requests.empty()) + return; + + RLCache::pointer cache = boost::make_shared(ledger); + + BOOST_FOREACH(wref wRequest, requests) + { + bool remove = true; + PFRequest::pointer pRequest = wRequest.lock(); + if (pRequest) + { + InfoSub::pointer ipSub = pRequest->wpSubscriber.lock(); + if (ipSub) + { + Json::Value update; + { + boost::recursive_mutex::scoped_lock sl(pRequest->mLock); + pRequest->doUpdate(cache, true); + update = pRequest->jvStatus; + } + update["type"] = "path_find"; + ipSub->send(update, false); + remove = false; + } + } + if (remove) + { + boost::recursive_mutex::scoped_lock sl(sLock); + sRequests.erase(wRequest); + } + } +} + // vim:ts=4 diff --git a/src/cpp/ripple/PFRequest.h b/src/cpp/ripple/PFRequest.h index 618bb5b9d5..fbfa6ab182 100644 --- a/src/cpp/ripple/PFRequest.h +++ b/src/cpp/ripple/PFRequest.h @@ -35,6 +35,7 @@ public: typedef boost::weak_ptr wptr; typedef boost::shared_ptr pointer; typedef const pointer& ref; + typedef const wptr& wref; typedef std::pair currIssuer_t;