From 8e520e881600a843ee4b529dd37f811738471c30 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 20 Nov 2012 15:20:43 -0800 Subject: [PATCH] Locking fixes. --- src/cpp/ripple/WSConnection.cpp | 15 +++++++++------ src/cpp/ripple/WSHandler.h | 9 ++++++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/WSConnection.cpp b/src/cpp/ripple/WSConnection.cpp index ae6a70ee88..8030cdc670 100644 --- a/src/cpp/ripple/WSConnection.cpp +++ b/src/cpp/ripple/WSConnection.cpp @@ -49,12 +49,15 @@ Json::Value WSConnection::invokeCommand(Json::Value& jvRequest) Json::Value jvResult(Json::objectValue); // Regular RPC command - jvResult["result"] = mRPCHandler.doCommand( - jvRequest["command"].asString(), - jvRequest.isMember("params") - ? jvRequest["params"] - : jvRequest, - mHandler->getPublic() ? RPCHandler::GUEST : RPCHandler::ADMIN); + { + boost::recursive_mutex::scoped_lock sl(theApp->getMasterLock()); + jvResult["result"] = mRPCHandler.doCommand( + jvRequest["command"].asString(), + jvRequest.isMember("params") + ? jvRequest["params"] + : jvRequest, + mHandler->getPublic() ? RPCHandler::GUEST : RPCHandler::ADMIN); + } // Currently we will simply unwrap errors returned by the RPC // API, in the future maybe we can make the responses diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 306647c5c5..9f4b23d5e6 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -116,7 +116,14 @@ public: } else { - send(cpClient, mMap[cpClient]->invokeCommand(jvRequest)); + boost::shared_ptr conn; + { + boost::mutex::scoped_lock sl(mMapLock); + conn = mMap[cpClient]; + } + if (!conn) + return; + send(cpClient, conn->invokeCommand(jvRequest)); } }