From 28898031f0eaa8f62148b3b88914ac2805ff2522 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Wed, 16 Jul 2014 15:35:44 -0400 Subject: [PATCH] Eliminate spurious SHAMap::getFetchPack failure (RIPD-379) --- src/ripple/module/app/shamap/SHAMapSync.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/ripple/module/app/shamap/SHAMapSync.cpp b/src/ripple/module/app/shamap/SHAMapSync.cpp index f365b2e3e..c27fa645c 100644 --- a/src/ripple/module/app/shamap/SHAMapSync.cpp +++ b/src/ripple/module/app/shamap/SHAMapSync.cpp @@ -637,19 +637,17 @@ static void addFPtoList (std::list& list, const uint25 void SHAMap::getFetchPack (SHAMap* have, bool includeLeaves, int max, std::function func) { - ScopedReadLockType ul1 (mLock), ul2; + ScopedReadLockType ul1 (mLock, boost::defer_lock); + ScopedReadLockType ul2; if (have) { - ul2 = std::move (ScopedReadLockType (have->mLock, boost::try_to_lock)); - - if (! ul2.owns_lock ()) - { - WriteLog (lsINFO, SHAMap) << "Unable to create pack due to lock"; - return; - } + assert(this != have); + ul2 = ScopedReadLockType (have->mLock, boost::defer_lock); + std::lock(ul1, ul2); } - + else + ul1.lock(); if (root->getNodeHash ().isZero ()) return;