Fix crash in CheckAndRemove

Closes #732
This commit is contained in:
UdjinM6 2016-03-14 15:17:23 +03:00 committed by Holger Schinzel
parent c872091296
commit e0c4dd0129

View File

@ -265,7 +265,7 @@ void CMasternodeMan::CheckAndRemove(bool forceExpiredRemoval)
(*it).activeState == CMasternode::MASTERNODE_VIN_SPENT || (*it).activeState == CMasternode::MASTERNODE_VIN_SPENT ||
(forceExpiredRemoval && (*it).activeState == CMasternode::MASTERNODE_EXPIRED) || (forceExpiredRemoval && (*it).activeState == CMasternode::MASTERNODE_EXPIRED) ||
(*it).protocolVersion < mnpayments.GetMinMasternodePaymentsProto()) { (*it).protocolVersion < mnpayments.GetMinMasternodePaymentsProto()) {
LogPrint("masternode", "CMasternodeMan: Removing inactive Masternode %s - %i now\n", (*it).addr.ToString(), size() - 1); LogPrint("masternode", "CMasternodeMan::CheckAndRemove - Removing inactive Masternode %s - %i now\n", (*it).addr.ToString(), size() - 1);
//erase all of the broadcasts we've seen from this vin //erase all of the broadcasts we've seen from this vin
// -- if we missed a few pings and the node was removed, this will allow is to get it back without them // -- if we missed a few pings and the node was removed, this will allow is to get it back without them
@ -326,21 +326,23 @@ void CMasternodeMan::CheckAndRemove(bool forceExpiredRemoval)
} }
} }
// remove expired mapSeenMasternodeBroadcast // remove expired mapSeenMasternodeBroadcast
map<uint256, CMasternodeBroadcast>::iterator it3 = mapSeenMasternodeBroadcast.begin(); map<uint256, CMasternodeBroadcast>::iterator it3 = mapSeenMasternodeBroadcast.begin();
while(it3 != mapSeenMasternodeBroadcast.end()){ while(it3 != mapSeenMasternodeBroadcast.end()){
if((*it3).second.lastPing.sigTime < GetTime()-(MASTERNODE_REMOVAL_SECONDS*2)){ if((*it3).second.lastPing.sigTime < GetTime() - MASTERNODE_REMOVAL_SECONDS*2){
mapSeenMasternodeBroadcast.erase(it3++); LogPrint("masternode", "CMasternodeMan::CheckAndRemove - Removing expired Masternode broadcast %s\n", (*it3).second.GetHash().ToString());
masternodeSync.mapSeenSyncMNB.erase((*it3).second.GetHash()); masternodeSync.mapSeenSyncMNB.erase((*it3).second.GetHash());
} else { mapSeenMasternodeBroadcast.erase(it3++);
++it3; } else {
} ++it3;
} }
}
// remove expired mapSeenMasternodePing // remove expired mapSeenMasternodePing
map<uint256, CMasternodePing>::iterator it4 = mapSeenMasternodePing.begin(); map<uint256, CMasternodePing>::iterator it4 = mapSeenMasternodePing.begin();
while(it4 != mapSeenMasternodePing.end()){ while(it4 != mapSeenMasternodePing.end()){
if((*it4).second.sigTime < GetTime()-(MASTERNODE_REMOVAL_SECONDS*2)){ if((*it4).second.sigTime < GetTime() - MASTERNODE_REMOVAL_SECONDS*2){
LogPrint("masternode", "CMasternodeMan::CheckAndRemove - Removing expired Masternode ping %s\n", (*it3).second.GetHash().ToString());
mapSeenMasternodePing.erase(it4++); mapSeenMasternodePing.erase(it4++);
} else { } else {
++it4; ++it4;