From f1e7e371306d683fbb0aba9603305b32e184d203 Mon Sep 17 00:00:00 2001 From: Patrick Strateman Date: Tue, 25 Aug 2015 16:30:02 -0700 Subject: [PATCH] Acquire cs_vNodes before changing refrence counts --- src/net.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index edfe4ada7..e1b6176f3 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -673,8 +673,15 @@ static list vNodesDisconnected; class CNodeRef { public: - CNodeRef(CNode *pnode) : _pnode(pnode) {_pnode->AddRef();} - ~CNodeRef() {_pnode->Release();} + CNodeRef(CNode *pnode) : _pnode(pnode) { + LOCK(cs_vNodes); + _pnode->AddRef(); + } + + ~CNodeRef() { + LOCK(cs_vNodes); + _pnode->Release(); + } CNode& operator *() const {return *_pnode;}; CNode* operator ->() const {return _pnode;}; @@ -682,6 +689,8 @@ public: CNodeRef& operator =(const CNodeRef& other) { if (this != &other) { + LOCK(cs_vNodes); + _pnode->Release(); _pnode = other._pnode; _pnode->AddRef(); @@ -692,6 +701,7 @@ public: CNodeRef(const CNodeRef& other): _pnode(other._pnode) { + LOCK(cs_vNodes); _pnode->AddRef(); } private: