|
|
@ -333,7 +333,7 @@ bool MarkBlockAsReceived(const uint256& hash) { |
|
|
|
// Requires cs_main.
|
|
|
|
// Requires cs_main.
|
|
|
|
// returns false, still setting pit, if the block was already in flight from the same peer
|
|
|
|
// returns false, still setting pit, if the block was already in flight from the same peer
|
|
|
|
// pit will only be valid as long as the same cs_main lock is being held
|
|
|
|
// pit will only be valid as long as the same cs_main lock is being held
|
|
|
|
bool MarkBlockAsInFlight(NodeId nodeid, const uint256& hash, const Consensus::Params& consensusParams, const CBlockIndex* pindex = NULL, std::list<QueuedBlock>::iterator** pit = NULL) { |
|
|
|
bool MarkBlockAsInFlight(NodeId nodeid, const uint256& hash, const CBlockIndex* pindex = NULL, std::list<QueuedBlock>::iterator** pit = NULL) { |
|
|
|
CNodeState *state = State(nodeid); |
|
|
|
CNodeState *state = State(nodeid); |
|
|
|
assert(state != NULL); |
|
|
|
assert(state != NULL); |
|
|
|
|
|
|
|
|
|
|
@ -2064,7 +2064,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr |
|
|
|
if ((!fAlreadyInFlight && nodestate->nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) || |
|
|
|
if ((!fAlreadyInFlight && nodestate->nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) || |
|
|
|
(fAlreadyInFlight && blockInFlightIt->second.first == pfrom->GetId())) { |
|
|
|
(fAlreadyInFlight && blockInFlightIt->second.first == pfrom->GetId())) { |
|
|
|
std::list<QueuedBlock>::iterator* queuedBlockIt = NULL; |
|
|
|
std::list<QueuedBlock>::iterator* queuedBlockIt = NULL; |
|
|
|
if (!MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), chainparams.GetConsensus(), pindex, &queuedBlockIt)) { |
|
|
|
if (!MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), pindex, &queuedBlockIt)) { |
|
|
|
if (!(*queuedBlockIt)->partialBlock) |
|
|
|
if (!(*queuedBlockIt)->partialBlock) |
|
|
|
(*queuedBlockIt)->partialBlock.reset(new PartiallyDownloadedBlock(&mempool)); |
|
|
|
(*queuedBlockIt)->partialBlock.reset(new PartiallyDownloadedBlock(&mempool)); |
|
|
|
else { |
|
|
|
else { |
|
|
@ -2368,7 +2368,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr |
|
|
|
} |
|
|
|
} |
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom, pindex->pprev, chainparams.GetConsensus()); |
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pfrom, pindex->pprev, chainparams.GetConsensus()); |
|
|
|
vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash())); |
|
|
|
vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash())); |
|
|
|
MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), chainparams.GetConsensus(), pindex); |
|
|
|
MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), pindex); |
|
|
|
LogPrint(BCLog::NET, "Requesting block %s from peer=%d\n", |
|
|
|
LogPrint(BCLog::NET, "Requesting block %s from peer=%d\n", |
|
|
|
pindex->GetBlockHash().ToString(), pfrom->id); |
|
|
|
pindex->GetBlockHash().ToString(), pfrom->id); |
|
|
|
} |
|
|
|
} |
|
|
@ -3223,7 +3223,7 @@ bool SendMessages(CNode* pto, CConnman& connman, const std::atomic<bool>& interr |
|
|
|
BOOST_FOREACH(const CBlockIndex *pindex, vToDownload) { |
|
|
|
BOOST_FOREACH(const CBlockIndex *pindex, vToDownload) { |
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pto, pindex->pprev, consensusParams); |
|
|
|
uint32_t nFetchFlags = GetFetchFlags(pto, pindex->pprev, consensusParams); |
|
|
|
vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash())); |
|
|
|
vGetData.push_back(CInv(MSG_BLOCK | nFetchFlags, pindex->GetBlockHash())); |
|
|
|
MarkBlockAsInFlight(pto->GetId(), pindex->GetBlockHash(), consensusParams, pindex); |
|
|
|
MarkBlockAsInFlight(pto->GetId(), pindex->GetBlockHash(), pindex); |
|
|
|
LogPrint(BCLog::NET, "Requesting block %s (%d) peer=%d\n", pindex->GetBlockHash().ToString(), |
|
|
|
LogPrint(BCLog::NET, "Requesting block %s (%d) peer=%d\n", pindex->GetBlockHash().ToString(), |
|
|
|
pindex->nHeight, pto->id); |
|
|
|
pindex->nHeight, pto->id); |
|
|
|
} |
|
|
|
} |
|
|
|