diff options
| author | Patrick Strateman <[email protected]> | 2015-08-25 16:30:02 -0700 |
|---|---|---|
| committer | Patrick Strateman <[email protected]> | 2015-08-25 16:30:02 -0700 |
| commit | fed30940ef22f242b9dada2dc4f7c5348faf8922 (patch) | |
| tree | c397e6d31f3ab7dc4b723bb4cc9dc6fd6f7512ea /src/net.cpp | |
| parent | CNodeRef copy constructor and assignment operator (diff) | |
| download | discoin-fed30940ef22f242b9dada2dc4f7c5348faf8922.tar.xz discoin-fed30940ef22f242b9dada2dc4f7c5348faf8922.zip | |
Acquire cs_vNodes before changing refrence counts
Diffstat (limited to 'src/net.cpp')
| -rw-r--r-- | src/net.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/net.cpp b/src/net.cpp index cb5a24f0a..e1b0e83e9 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -777,8 +777,15 @@ static list<CNode*> 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;}; @@ -786,6 +793,8 @@ public: CNodeRef& operator =(const CNodeRef& other) { if (this != &other) { + LOCK(cs_vNodes); + _pnode->Release(); _pnode = other._pnode; _pnode->AddRef(); @@ -796,6 +805,7 @@ public: CNodeRef(const CNodeRef& other): _pnode(other._pnode) { + LOCK(cs_vNodes); _pnode->AddRef(); } private: |