Only process orphan votes once

This commit is contained in:
Tim Flynn 2016-11-14 13:22:50 -05:00
parent 08e977efe5
commit d167772643

View File

@ -618,14 +618,15 @@ bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote,
uint256 nHashGovobj = vote.GetParentHash(); uint256 nHashGovobj = vote.GetParentHash();
object_m_it it = mapObjects.find(nHashGovobj); object_m_it it = mapObjects.find(nHashGovobj);
if(it == mapObjects.end()) { if(it == mapObjects.end()) {
mapOrphanVotes.Insert(nHashGovobj, vote); if(mapOrphanVotes.Insert(nHashGovobj, vote)) {
RequestGovernanceObject(pfrom, nHashGovobj); RequestGovernanceObject(pfrom, nHashGovobj);
std::ostringstream ostr; std::ostringstream ostr;
ostr << "CGovernanceManager::ProcessVote -- Unknown parent object " ostr << "CGovernanceManager::ProcessVote -- Unknown parent object "
<< ", MN outpoint = " << vote.GetVinMasternode().prevout.ToStringShort() << ", MN outpoint = " << vote.GetVinMasternode().prevout.ToStringShort()
<< ", governance object hash = " << vote.GetParentHash().ToString() << "\n"; << ", governance object hash = " << vote.GetParentHash().ToString() << "\n";
LogPrintf(ostr.str().c_str()); LogPrintf(ostr.str().c_str());
exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_WARNING); exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_WARNING);
}
return false; return false;
} }
@ -814,14 +815,15 @@ bool CGovernanceObject::ProcessVote(CNode* pfrom,
{ {
int nMNIndex = governance.GetMasternodeIndex(vote.GetVinMasternode()); int nMNIndex = governance.GetMasternodeIndex(vote.GetVinMasternode());
if(nMNIndex < 0) { if(nMNIndex < 0) {
mapOrphanVotes.Insert(vote.GetVinMasternode(), vote); if(mapOrphanVotes.Insert(vote.GetVinMasternode(), vote)) {
if(pfrom) { if(pfrom) {
mnodeman.AskForMN(pfrom, vote.GetVinMasternode()); mnodeman.AskForMN(pfrom, vote.GetVinMasternode());
}
std::ostringstream ostr;
ostr << "CGovernanceObject::UpdateVote -- Masternode index not found\n";
LogPrintf(ostr.str().c_str());
exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_WARNING);
} }
std::ostringstream ostr;
ostr << "CGovernanceObject::UpdateVote -- Masternode index not found\n";
LogPrintf(ostr.str().c_str());
exception = CGovernanceException(ostr.str(), GOVERNANCE_EXCEPTION_WARNING);
return false; return false;
} }