Eliminate spurious SHAMap::getFetchPack failure (RIPD-379)

This commit is contained in:
Howard Hinnant
2014-07-16 15:35:44 -04:00
committed by Vinnie Falco
parent 1ce0f94638
commit 28898031f0

View File

@@ -637,19 +637,17 @@ static void addFPtoList (std::list<SHAMap::fetchPackEntry_t>& list, const uint25
void SHAMap::getFetchPack (SHAMap* have, bool includeLeaves, int max, void SHAMap::getFetchPack (SHAMap* have, bool includeLeaves, int max,
std::function<void (const uint256&, const Blob&)> func) std::function<void (const uint256&, const Blob&)> func)
{ {
ScopedReadLockType ul1 (mLock), ul2; ScopedReadLockType ul1 (mLock, boost::defer_lock);
ScopedReadLockType ul2;
if (have) if (have)
{ {
ul2 = std::move (ScopedReadLockType (have->mLock, boost::try_to_lock)); assert(this != have);
ul2 = ScopedReadLockType (have->mLock, boost::defer_lock);
if (! ul2.owns_lock ()) std::lock(ul1, ul2);
{
WriteLog (lsINFO, SHAMap) << "Unable to create pack due to lock";
return;
}
} }
else
ul1.lock();
if (root->getNodeHash ().isZero ()) if (root->getNodeHash ().isZero ())
return; return;