aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuhas Daftuar <sdaftuar@gmail.com>2016-04-11 12:52:29 -0400
committerSuhas Daftuar <sdaftuar@gmail.com>2016-04-11 15:58:01 -0400
commit7e91f632c70ff1848a152f24ee67a06796803943 (patch)
tree53995d33bf585645d43e51abbef2a7caf9754ef3
parent934f2b5e769368d1a2407d41d53cafd5d51e6b36 (diff)
downloadbitcoin-7e91f632c70ff1848a152f24ee67a06796803943.tar.xz
Use txid as key in mapAlreadyAskedFor
Previously we used the CInv that would be sent to the peer announcing the transaction as the key, but using the txid instead allows us to decouple the p2p layer from the application logic (which relies on this map to avoid duplicate tx requests).
-rw-r--r--src/main.cpp2
-rw-r--r--src/net.cpp6
-rw-r--r--src/net.h2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/main.cpp b/src/main.cpp
index f5c7e11d6e..5c1af9eccc 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -4956,7 +4956,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
CValidationState state;
pfrom->setAskFor.erase(inv.hash);
- mapAlreadyAskedFor.erase(inv);
+ mapAlreadyAskedFor.erase(inv.hash);
CFeeRate txFeeRate = CFeeRate(0);
if (!AlreadyHave(inv) && AcceptToMemoryPool(mempool, state, tx, true, &fMissingInputs, &txFeeRate)) {
diff --git a/src/net.cpp b/src/net.cpp
index e8cc753a48..3bf8c165dc 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -93,7 +93,7 @@ CCriticalSection cs_vNodes;
map<CInv, CDataStream> mapRelay;
deque<pair<int64_t, CInv> > vRelayExpiration;
CCriticalSection cs_mapRelay;
-limitedmap<CInv, int64_t> mapAlreadyAskedFor(MAX_INV_SZ);
+limitedmap<uint256, int64_t> mapAlreadyAskedFor(MAX_INV_SZ);
static deque<string> vOneShots;
CCriticalSection cs_vOneShots;
@@ -2436,7 +2436,7 @@ void CNode::AskFor(const CInv& inv)
// We're using mapAskFor as a priority queue,
// the key is the earliest time the request can be sent
int64_t nRequestTime;
- limitedmap<CInv, int64_t>::const_iterator it = mapAlreadyAskedFor.find(inv);
+ limitedmap<uint256, int64_t>::const_iterator it = mapAlreadyAskedFor.find(inv.hash);
if (it != mapAlreadyAskedFor.end())
nRequestTime = it->second;
else
@@ -2455,7 +2455,7 @@ void CNode::AskFor(const CInv& inv)
if (it != mapAlreadyAskedFor.end())
mapAlreadyAskedFor.update(it, nRequestTime);
else
- mapAlreadyAskedFor.insert(std::make_pair(inv, nRequestTime));
+ mapAlreadyAskedFor.insert(std::make_pair(inv.hash, nRequestTime));
mapAskFor.insert(std::make_pair(nRequestTime, inv));
}
diff --git a/src/net.h b/src/net.h
index ab9eb68d85..1892c963fc 100644
--- a/src/net.h
+++ b/src/net.h
@@ -164,7 +164,7 @@ extern CCriticalSection cs_vNodes;
extern std::map<CInv, CDataStream> mapRelay;
extern std::deque<std::pair<int64_t, CInv> > vRelayExpiration;
extern CCriticalSection cs_mapRelay;
-extern limitedmap<CInv, int64_t> mapAlreadyAskedFor;
+extern limitedmap<uint256, int64_t> mapAlreadyAskedFor;
extern std::vector<std::string> vAddedNodes;
extern CCriticalSection cs_vAddedNodes;