From 7dc3335147717a1affc8e67b673893353e24a0ff Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 23 May 2013 02:03:31 -0700 Subject: [PATCH] Deadlock fix. --- src/cpp/ripple/Peer.cpp | 5 +++-- src/cpp/ripple/Peer.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 869a7dee80..3c557b567d 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -612,7 +612,7 @@ void Peer::processReadBuffer() event->reName("Peer::ledgerdata"); boost::shared_ptr msg = boost::make_shared(); if (msg->ParseFromArray(&mReadbuf[HEADER_SIZE], mReadbuf.size() - HEADER_SIZE)) - recvLedger(msg); + recvLedger(msg, sl); else cLog(lsWARNING) << "parse error: " << type; } @@ -1663,8 +1663,9 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet, ScopedLock& MasterLockHold sendPacket(oPacket, true); } -void Peer::recvLedger(const boost::shared_ptr& packet_ptr) +void Peer::recvLedger(const boost::shared_ptr& packet_ptr, ScopedLock& MasterLockHolder) { + MasterLockHolder.unlock(); ripple::TMLedgerData& packet = *packet_ptr; if (packet.nodes().size() <= 0) { diff --git a/src/cpp/ripple/Peer.h b/src/cpp/ripple/Peer.h index 8d279583d0..cfd39595a3 100644 --- a/src/cpp/ripple/Peer.h +++ b/src/cpp/ripple/Peer.h @@ -101,7 +101,7 @@ protected: void recvGetAccount(ripple::TMGetAccount& packet); void recvAccount(ripple::TMAccount& packet); void recvGetLedger(ripple::TMGetLedger& packet, ScopedLock& MasterLockHolder); - void recvLedger(const boost::shared_ptr& packet); + void recvLedger(const boost::shared_ptr& packet, ScopedLock& MasterLockHolder); void recvStatus(ripple::TMStatusChange& packet); void recvPropose(const boost::shared_ptr& packet); void recvHaveTxSet(ripple::TMHaveTransactionSet& packet);