From f31ba168270eb677bcd7c7deb5f80829ab1e47da Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 28 Jun 2013 16:30:37 -0700 Subject: [PATCH] Fix a race condition in NetworkOPs::gotTXData --- src/cpp/ripple/NetworkOPs.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index a9e7f5196..b7be9a3c8 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1024,13 +1024,20 @@ void NetworkOPs::takePosition (int seq, SHAMap::ref position) SHAMapAddNode NetworkOPs::gotTXData (const boost::shared_ptr& peer, uint256 const& hash, const std::list& nodeIDs, const std::list< Blob >& nodeData) { - if (!haveConsensusObject ()) + + boost::shared_ptr consensus; + { + ScopedLock mlh(theApp->getMasterLock()); + consensus = mConsensus; + } + + if (!consensus) { WriteLog (lsWARNING, NetworkOPs) << "Got TX data with no consensus object"; return SHAMapAddNode (); } - return mConsensus->peerGaveNodes (peer, hash, nodeIDs, nodeData); + return consensus->peerGaveNodes (peer, hash, nodeIDs, nodeData); } bool NetworkOPs::hasTXSet (const boost::shared_ptr& peer, uint256 const& set, protocol::TxSetStatus status)