Merge #7919: Fix headers announcements edge case

3a99fb2 Fix headers announcements edge case (Suhas Daftuar)
This commit is contained in:
Wladimir J. van der Laan 2016-04-22 08:40:13 +02:00
commit 76176823ba
No known key found for this signature in database
GPG key ID: 74810B012346C9A6

View file

@ -5717,7 +5717,21 @@ bool SendMessages(CNode* pto)
fRevertToInv = true;
break;
}
assert(pBestIndex == NULL || pindex->pprev == pBestIndex);
if (pBestIndex != NULL && pindex->pprev != pBestIndex) {
// This means that the list of blocks to announce don't
// connect to each other.
// This shouldn't really be possible to hit during
// regular operation (because reorgs should take us to
// a chain that has some block not on the prior chain,
// which should be caught by the prior check), but one
// way this could happen is by using invalidateblock /
// reconsiderblock repeatedly on the tip, causing it to
// be added multiple times to vBlockHashesToAnnounce.
// Robustly deal with this rare situation by reverting
// to an inv.
fRevertToInv = true;
break;
}
pBestIndex = pindex;
if (fFoundStartingHeader) {
// add this to the headers message