aboutsummaryrefslogtreecommitdiff
path: root/src/net.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2015-12-01 08:56:43 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2015-12-01 09:02:33 +0100
commit1b5118bfa0d94dbc0f3d7803c3e68626b0a694ee (patch)
tree7115cda554e234eb5fea42a68f1c71a6a4e4bfe3 /src/net.cpp
parentc143c499c85bbe99e3036de21eeffb73d61cd265 (diff)
parentebb25f4c23adbcb55796c402bafd6064a136f16f (diff)
downloadbitcoin-1b5118bfa0d94dbc0f3d7803c3e68626b0a694ee.tar.xz
Merge pull request #7079
ebb25f4 Limit setAskFor and retire requested entries only when a getdata returns. (Gregory Maxwell) 5029698 prevent peer flooding request queue for an inv (kazcw)
Diffstat (limited to 'src/net.cpp')
-rw-r--r--src/net.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/net.cpp b/src/net.cpp
index abc7cbb8f4..e5659efc01 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -2407,8 +2407,12 @@ CNode::~CNode()
void CNode::AskFor(const CInv& inv)
{
- if (mapAskFor.size() > MAPASKFOR_MAX_SZ)
+ if (mapAskFor.size() > MAPASKFOR_MAX_SZ || setAskFor.size() > SETASKFOR_MAX_SZ)
return;
+ // a peer may not have multiple non-responded queue positions for a single inv item
+ if (!setAskFor.insert(inv.hash).second)
+ return;
+
// We're using mapAskFor as a priority queue,
// the key is the earliest time the request can be sent
int64_t nRequestTime;