From 2c4d1e51ec93e8a725b5116f6c029853c40941d5 Mon Sep 17 00:00:00 2001 From: Tim Flynn Date: Thu, 10 Nov 2016 21:04:10 -0500 Subject: [PATCH 1/4] Fix CGovernanceManager initialization problem --- src/init.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/init.cpp b/src/init.cpp index ee305fe80c4d..c3c37fd4f861 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1883,6 +1883,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) darkSendPool.UpdatedBlockTip(chainActive.Tip()); mnpayments.UpdatedBlockTip(chainActive.Tip()); masternodeSync.UpdatedBlockTip(chainActive.Tip()); + governance.UpdatedBlockTip(chainActive.Tip()); // ********************************************************* Step 11d: start dash-privatesend thread From 2d8ceb048e8ad4df65fb555dc43b1c36cafd3805 Mon Sep 17 00:00:00 2001 From: Tim Flynn Date: Thu, 10 Nov 2016 21:08:11 -0500 Subject: [PATCH 2/4] Added logging messages for cases where CGovernanceManager receives a message while not synced --- src/governance.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/governance.cpp b/src/governance.cpp index f923eadbe318..e843df807cbd 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -129,7 +129,10 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, std::string& strCommand, C LOCK(cs); // MAKE SURE WE HAVE A VALID REFERENCE TO THE TIP BEFORE CONTINUING - if(!pCurrentBlockIndex) return; + if(!pCurrentBlockIndex) { + LogPrintf("CGovernanceManager::ProcessMessage MNGOVERNANCEOBJECT -- pCurrentBlockIndex is NULL\n"); + return; + } CGovernanceObject govobj; vRecv >> govobj; @@ -172,7 +175,10 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, std::string& strCommand, C else if (strCommand == NetMsgType::MNGOVERNANCEOBJECTVOTE) { // Ignore such messages until masternode list is synced - if(!masternodeSync.IsMasternodeListSynced()) return; + if(!masternodeSync.IsMasternodeListSynced()) { + LogPrintf("CGovernanceManager::ProcessMessage MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n"); + return; + } CGovernanceVote vote; vRecv >> vote; From a6b5945a46ad21dce2f73f9849226c703aecdf88 Mon Sep 17 00:00:00 2001 From: Tim Flynn Date: Thu, 10 Nov 2016 21:41:00 -0500 Subject: [PATCH 3/4] Prevent potential NULL pointer dereference --- src/governance.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/governance.cpp b/src/governance.cpp index e843df807cbd..76120f985fdc 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -1131,6 +1131,10 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex *pindex) // On the other hand it should be safe for us to access pindex without holding a lock // on cs_main because the CBlockIndex objects are dynamically allocated and // presumably never deleted. + if(!pindex) { + return; + } + LOCK(cs); pCurrentBlockIndex = pindex; nCachedBlockHeight = pCurrentBlockIndex->nHeight; From 1fb6b2762d8d6fc009c82f765623f2574301d78a Mon Sep 17 00:00:00 2001 From: Tim Flynn Date: Fri, 11 Nov 2016 07:52:57 -0500 Subject: [PATCH 4/4] Changed LogPrintf to LogPrint --- src/governance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/governance.cpp b/src/governance.cpp index 76120f985fdc..146a596eb54b 100644 --- a/src/governance.cpp +++ b/src/governance.cpp @@ -176,7 +176,7 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, std::string& strCommand, C { // Ignore such messages until masternode list is synced if(!masternodeSync.IsMasternodeListSynced()) { - LogPrintf("CGovernanceManager::ProcessMessage MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n"); + LogPrint("gobject", "CGovernanceManager::ProcessMessage MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n"); return; }