From 4e97a9d9eb91f87e0611c31f28e2e02a07cea8aa Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 28 Jun 2012 18:34:11 +0200 Subject: [PATCH] Lock vnThreadsRunning[THREAD_RPCHANDLER]. --- src/bitcoinrpc.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 82bab36dc..48c5a738b 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -2913,10 +2913,15 @@ void ThreadRPCServer2(void* parg) StopRequests(); } +static CCriticalSection cs_THREAD_RPCHANDLER; + void ThreadRPCServer3(void* parg) { IMPLEMENT_RANDOMIZE_STACK(ThreadRPCServer3(parg)); - vnThreadsRunning[THREAD_RPCHANDLER]++; + { + LOCK(cs_THREAD_RPCHANDLER); + vnThreadsRunning[THREAD_RPCHANDLER]++; + } AcceptedConnection *conn = (AcceptedConnection *) parg; bool fRun = true; @@ -2925,7 +2930,10 @@ void ThreadRPCServer3(void* parg) { conn->close(); delete conn; - --vnThreadsRunning[THREAD_RPCHANDLER]; + { + LOCK(cs_THREAD_RPCHANDLER); + --vnThreadsRunning[THREAD_RPCHANDLER]; + } return; } map mapHeaders; @@ -3005,7 +3013,10 @@ void ThreadRPCServer3(void* parg) } delete conn; - vnThreadsRunning[THREAD_RPCHANDLER]--; + { + LOCK(cs_THREAD_RPCHANDLER); + vnThreadsRunning[THREAD_RPCHANDLER]--; + } } json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_spirit::Array ¶ms) const