Actually only use filterInventoryKnown with MSG_TX inventory messages.

Previously this logic could erroneously filter a MSG_BLOCK inventory message.
This commit is contained in:
Gregory Maxwell 2015-11-29 22:10:31 +00:00 committed by Pieter Wuille
parent b6a0da45db
commit d41e44c9ac

View file

@ -5510,7 +5510,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
vInvWait.reserve(pto->vInventoryToSend.size());
BOOST_FOREACH(const CInv& inv, pto->vInventoryToSend)
{
if (pto->filterInventoryKnown.contains(inv.hash))
if (inv.type == MSG_TX && pto->filterInventoryKnown.contains(inv.hash))
continue;
// trickle out tx inv to protect privacy
@ -5531,15 +5531,13 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
}
}
if (!pto->filterInventoryKnown.contains(inv.hash))
pto->filterInventoryKnown.insert(inv.hash);
vInv.push_back(inv);
if (vInv.size() >= 1000)
{
pto->filterInventoryKnown.insert(inv.hash);
vInv.push_back(inv);
if (vInv.size() >= 1000)
{
pto->PushMessage("inv", vInv);
vInv.clear();
}
pto->PushMessage("inv", vInv);
vInv.clear();
}
}
pto->vInventoryToSend = vInvWait;