aboutsummaryrefslogtreecommitdiff
path: root/src/net.cpp
diff options
context:
space:
mode:
authorMatt Corallo <[email protected]>2017-01-24 16:51:22 -0500
committerMatt Corallo <[email protected]>2017-01-25 18:59:16 -0500
commit236618061a445d2cb11e722cfac5fdae5be26abb (patch)
tree274900c35be308f40059881f196fcdc35cb02132 /src/net.cpp
parentEnsure cs_vNodes is held when using the return value from FindNode (diff)
downloaddiscoin-236618061a445d2cb11e722cfac5fdae5be26abb.tar.xz
discoin-236618061a445d2cb11e722cfac5fdae5be26abb.zip
Do not add to vNodes until fOneShot/fFeeler/fAddNode have been set
Diffstat (limited to 'src/net.cpp')
-rw-r--r--src/net.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/net.cpp b/src/net.cpp
index 7489b3f32..108d95a17 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -342,8 +342,8 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
CNode* pnode = FindNode((CService)addrConnect);
if (pnode)
{
- pnode->AddRef();
- return pnode;
+ LogPrintf("Failed to open new connection, already connected\n");
+ return NULL;
}
}
@@ -373,12 +373,12 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
CNode* pnode = FindNode((CService)addrConnect);
if (pnode)
{
- pnode->AddRef();
if (pnode->addrName.empty()) {
pnode->addrName = std::string(pszDest);
}
CloseSocket(hSocket);
- return pnode;
+ LogPrintf("Failed to open new connection, already connected\n");
+ return NULL;
}
}
@@ -391,11 +391,6 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
pnode->nServicesExpected = ServiceFlags(addrConnect.nServices & nRelevantServices);
pnode->nTimeConnected = GetTime();
pnode->AddRef();
- GetNodeSignals().InitializeNode(pnode, *this);
- {
- LOCK(cs_vNodes);
- vNodes.push_back(pnode);
- }
return pnode;
} else if (!proxyConnectionFailed) {
@@ -1838,6 +1833,12 @@ bool CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai
if (fAddnode)
pnode->fAddnode = true;
+ {
+ LOCK(cs_vNodes);
+ vNodes.push_back(pnode);
+ }
+ GetNodeSignals().InitializeNode(pnode, *this);
+
return true;
}