Browse Source

Fix potential deadlock

Conflict:
* cs_main in ProcessMessages() (before calling ProcessMessages)
* cs_vSend in CNode::BeginMessage
versus:
* cs_vSend in ThreadMessageHandler2 (before calling SendMessages)
* cs_main in SendMessages

Even though cs_vSend is a try_lock, if it succeeds simultaneously with
the locking of cs_main in ProcessMessages(), it could cause a deadlock.
0.8
Pieter Wuille 13 years ago
parent
commit
c581cc16bb
  1. 4
      src/main.cpp

4
src/main.cpp

@ -2807,8 +2807,8 @@ bool ProcessMessages(CNode* pfrom) @@ -2807,8 +2807,8 @@ bool ProcessMessages(CNode* pfrom)
bool SendMessages(CNode* pto, bool fSendTrickle)
{
{
LOCK(cs_main);
TRY_LOCK(cs_main, lockMain);
if (lockMain) {
// Don't send anything until we get their version message
if (pto->nVersion == 0)
return true;

Loading…
Cancel
Save