From 6960e275ff866cd461fc239536fd92c64a7abeac Mon Sep 17 00:00:00 2001 From: projectmemetic Date: Tue, 26 Feb 2019 13:28:26 -0500 Subject: [PATCH 1/2] Add a lock around nodes nRefCount, some other lock testing --- src/masternode.cpp | 4 ++-- src/net.cpp | 4 ++-- src/net.h | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/masternode.cpp b/src/masternode.cpp index 2acf445a..c6e879d5 100644 --- a/src/masternode.cpp +++ b/src/masternode.cpp @@ -128,7 +128,7 @@ void ProcessMessageMasternode(CNode* pfrom, std::string& strCommand, CDataStream //search existing masternode list, this is where we update existing masternodes with new dsee broadcasts - //LOCK(cs_masternodes); + LOCK(cs_masternodes); BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { if(mn.vin.prevout == vin.prevout) { // count == -1 when it's a new entry @@ -248,7 +248,7 @@ void ProcessMessageMasternode(CNode* pfrom, std::string& strCommand, CDataStream } // see if we have this masternode - //LOCK(cs_masternodes); + LOCK(cs_masternodes); BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { if(mn.vin.prevout == vin.prevout) { // LogPrintf("dseep - Found corresponding mn for vin: %s\n", vin.ToString().c_str()); diff --git a/src/net.cpp b/src/net.cpp index b7f4170b..7668d8b6 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -875,7 +875,7 @@ void ThreadSocketHandler() // vector vNodesCopy; { - //LOCK(cs_vNodes); + LOCK(cs_vNodes); vNodesCopy = vNodes; BOOST_FOREACH(CNode* pnode, vNodesCopy) pnode->AddRef(); @@ -1568,7 +1568,7 @@ void ThreadMessageHandler(int ncore) } // niceness - MilliSleep(10); + MilliSleep(3); } } diff --git a/src/net.h b/src/net.h index 155d7f1d..b6ceca7e 100644 --- a/src/net.h +++ b/src/net.h @@ -269,6 +269,7 @@ class CNode bool fDarkSendMaster; CSemaphoreGrant grantOutbound; int nRefCount; + CCriticalSection cs_nRefCount; NodeId id; protected: @@ -417,12 +418,14 @@ class CNode CNode* AddRef() { + LOCK(cs_nRefCount); nRefCount++; return this; } void Release() { + LOCK(cs_nRefCount); nRefCount--; } From a8efc35dee373b08ecc23aecf98f3a2d10080cf0 Mon Sep 17 00:00:00 2001 From: projectmemetic Date: Tue, 26 Feb 2019 14:13:43 -0500 Subject: [PATCH 2/2] Only disconnect stalled peers if IsSyncing --- src/main.cpp | 2 +- src/net.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a53f0a31..8266522d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5062,7 +5062,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) // Detect stalled peers. int nSyncTimeout = GetArg("-synctimeout", 60); int64_t tNow = GetTimeMillis(); - if (pto->tGetblocks) { + if (pto->tGetblocks && IsSyncing()) { if (pto->tBlockRecving > pto->tBlockRecved) { if (tNow-pto->tBlockRecving > nSyncTimeout * 1000) { LogPrintf("sync peer=%d: Block download stalled for over %d seconds.\n", pto->id, nSyncTimeout); diff --git a/src/net.cpp b/src/net.cpp index 7668d8b6..6b8c459e 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -978,7 +978,7 @@ void ThreadSocketHandler() BOOST_FOREACH(CNode* pnode, vNodesCopy) pnode->Release(); } - MilliSleep(2); // niceness + MilliSleep(1); // niceness } } @@ -1568,7 +1568,7 @@ void ThreadMessageHandler(int ncore) } // niceness - MilliSleep(3); + MilliSleep(2); } }