diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index e2f5be8f5..d93a84b78 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -368,8 +368,6 @@ void LedgerAcquire::trigger(Peer::ref peer) ripple::TMGetObjectByHash tmBH; tmBH.set_query(true); tmBH.set_ledgerhash(mHash.begin(), mHash.size()); - if (mHaveBase) - tmBH.set_seq(mLedger->getLedgerSeq()); bool typeSet = false; BOOST_FOREACH(neededHash_t& p, need) { diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 922f9b07f..f560a14a9 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1264,6 +1264,12 @@ Json::Value NetworkOPs::getServerInfo(bool human, bool admin) info["complete_ledgers"] = theApp->getLedgerMaster().getCompleteLedgers(); + + + size_t fp = mFetchPack.getCacheSize(); + if (fp != 0) + info["fetch_pack"] = Json::UInt(fp); + info["peers"] = theApp->getConnectionPool().getPeerCount(); Json::Value lastClose = Json::objectValue; @@ -2008,6 +2014,7 @@ void NetworkOPs::makeFetchPack(Job&, boost::weak_ptr wPeer, boost::shared_ if (request->has_seq()) reply.set_seq(request->seq()); reply.set_ledgerhash(reply.ledgerhash()); + reply.set_type(ripple::TMGetObjectByHash::otFETCH_PACK); do { @@ -2061,6 +2068,7 @@ bool NetworkOPs::getFetchPack(const uint256& hash, std::vector& d bool ret = mFetchPack.retrieve(hash, data); if (!ret) return false; + mFetchPack.del(hash, false); if (hash != Serializer::getSHA512Half(data)) { cLog(lsWARNING) << "Bad entry in fetch pack"; diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 5d1c372b1..a1b6307e0 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -506,6 +506,22 @@ std::list SHAMap::getFetchPack(SHAMap* have, bool incl { std::list ret; + boost::recursive_mutex::scoped_lock ul1(mLock); + + UPTR_T< boost::unique_lock > ul2; + if (have) + { + UPTR_T< boost::unique_lock > ul3( + new boost::unique_lock(have->mLock, boost::try_to_lock)); + if (!(*ul3)) + { + cLog(lsINFO) << "Unable to create pack due to lock"; + return ret; + } + ul2.swap(ul3); + } + + if (root->isLeaf()) { if (includeLeaves && !root->getNodeHash().isZero() && @@ -566,7 +582,7 @@ std::list SHAMap::getFetchPack(SHAMap* have, bool incl break; } - cLog(lsINFO) << "Fetch pack has " << ret.size() << " entries"; + cLog(lsINFO) << "Made pack with " << ret.size() << " entries"; return ret; } diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 8b12d80da..c7fb41902 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -232,7 +232,7 @@ template bool TaggedCache::del(c if (!valid || entry.isExpired()) mCache.erase(cit); - return true; + return ret; } template