diff options
author | Gregory Maxwell <greg@xiph.org> | 2015-11-23 01:54:23 +0000 |
---|---|---|
committer | Gregory Maxwell <greg@xiph.org> | 2015-11-23 01:54:23 +0000 |
commit | ebb25f4c23adbcb55796c402bafd6064a136f16f (patch) | |
tree | 4f9ccbb6e0e8d46a47690caec79112d5726e16f6 /src/main.cpp | |
parent | 5029698186445bf3cd69d0e720f019c472661bff (diff) |
Limit setAskFor and retire requested entries only when a getdata returns.
The setAskFor duplicate elimination was too eager and removed entries
when we still had no getdata response, allowing the peer to keep
INVing and not responding.
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index 05dedb5631..2bcc4cbc54 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4406,6 +4406,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, bool fMissingInputs = false; CValidationState state; + pfrom->setAskFor.erase(inv.hash); mapAlreadyAskedFor.erase(inv); // Check for recently rejected (and do other quick existence checks) @@ -5225,8 +5226,10 @@ bool SendMessages(CNode* pto, bool fSendTrickle) pto->PushMessage("getdata", vGetData); vGetData.clear(); } + } else { + //If we're not going to ask, don't expect a response. + pto->setAskFor.erase(inv.hash); } - pto->setAskFor.erase(inv.hash); pto->mapAskFor.erase(pto->mapAskFor.begin()); } if (!vGetData.empty()) |