From: Richard Smith Date: Fri, 20 Apr 2012 22:19:18 +0000 (+0100) Subject: PPCoin: Minor fix of RPC command 'sendalert' X-Git-Tag: v0.4.0-unstable~187 X-Git-Url: https://git.novaco.in/?p=novacoin.git;a=commitdiff_plain;h=496060e1442eb7765668c4ddc9b9aa9f8a2be5ed PPCoin: Minor fix of RPC command 'sendalert' --- diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 21963c7..453fafd 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -1933,7 +1933,10 @@ Value repairwallet(const Array& params, bool fHelp) extern CCriticalSection cs_mapAlerts; extern map mapAlerts; -// ppcoin: send alert +// ppcoin: send alert. +// There is a known deadlock situation with ThreadMessageHandler +// ThreadMessageHandler: holds cs_vSend and acquiring cs_main in SendMessages() +// ThreadRPCServer: holds cs_main and acquiring cs_vSend in alert.RelayTo()/PushMessage()/BeginMessage() Value sendalert(const Array& params, bool fHelp) { if (fHelp || params.size() < 5) @@ -1970,7 +1973,9 @@ Value sendalert(const Array& params, bool fHelp) if (!key.Sign(Hash(alert.vchMsg.begin(), alert.vchMsg.end()), alert.vchSig)) throw runtime_error( "Unable to sign alert, check private key?\n"); - alert.ProcessAlert(); + if(!alert.ProcessAlert()) + throw runtime_error( + "Failed to process alert.\n"); // Relay alert CRITICAL_BLOCK(cs_vNodes) BOOST_FOREACH(CNode* pnode, vNodes)