From 9abdd1672165695428b54e22b9c81661e3a4aee9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 7 Jan 2014 12:43:27 -0800 Subject: [PATCH] Release the master lock earlier in a few cases --- src/ripple_app/peers/Peer.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/ripple_app/peers/Peer.cpp b/src/ripple_app/peers/Peer.cpp index 3d6418dfe8..a7f5b2b5da 100644 --- a/src/ripple_app/peers/Peer.cpp +++ b/src/ripple_app/peers/Peer.cpp @@ -424,7 +424,8 @@ private: void recvGetPeers (protocol::TMGetPeers & packet, Application::ScopedLockType& masterLockHolder); void recvPeers (protocol::TMPeers & packet); void recvEndpoints (protocol::TMEndpoints & packet); - void recvGetObjectByHash (const boost::shared_ptr& packet); + void recvGetObjectByHash (const boost::shared_ptr& packet, + Application::ScopedLockType& masterLockHolder); void recvPing (protocol::TMPing & packet); void recvErrorMessage (protocol::TMErrorMsg & packet); void recvSearchTransaction (protocol::TMSearchTransaction & packet); @@ -1081,7 +1082,7 @@ void PeerImp::processReadBuffer () boost::shared_ptr msg = boost::make_shared (); if (msg->ParseFromArray (&mReadbuf[PackedMessage::kHeaderBytes], mReadbuf.size () - PackedMessage::kHeaderBytes)) - recvGetObjectByHash (msg); + recvGetObjectByHash (msg, lock); else WriteLog (lsWARNING, Peer) << "parse error: " << type; } @@ -1793,8 +1794,11 @@ void PeerImp::recvEndpoints (protocol::TMEndpoints& packet) PeerFinder::PeerID (mNodePublic), endpoints); } -void PeerImp::recvGetObjectByHash (const boost::shared_ptr& ptr) +void PeerImp::recvGetObjectByHash (const boost::shared_ptr& ptr, + Application::ScopedLockType& masterLockHolder) { + masterLockHolder.unlock (); + protocol::TMGetObjectByHash& packet = *ptr; if (packet.query ()) @@ -2131,6 +2135,7 @@ void PeerImp::recvGetLedger (protocol::TMGetLedger& packet, Application::ScopedL } else { + masterLockHolder.unlock (); if (getApp().getFeeTrack().isLoadedLocal() && !mCluster) { WriteLog (lsDEBUG, Peer) << "Too busy to fetch ledger data"; @@ -2221,13 +2226,6 @@ void PeerImp::recvGetLedger (protocol::TMGetLedger& packet, Application::ScopedL return; } - if (ledger->isImmutable ()) - masterLockHolder.unlock (); - else - { - WriteLog (lsWARNING, Peer) << "Request for data from mutable ledger"; - } - // Fill out the reply uint256 lHash = ledger->getHash (); reply.set_ledgerhash (lHash.begin (), lHash.size ());