p2p: Forget peer's reconciliation state on disconnect
This commit is contained in:
1 parent
3fcf78ee6a
commit
4470acf076
3 files changed
+21
No files matched your search
@@ -1494,6 +1494,7 @@ void PeerManagerImpl::FinalizeNode(const CNode& node)
|
|||||||
}
|
}
|
||||||
WITH_LOCK(g_cs_orphans, m_orphanage.EraseForPeer(nodeid));
|
WITH_LOCK(g_cs_orphans, m_orphanage.EraseForPeer(nodeid));
|
||||||
m_txrequest.DisconnectedPeer(nodeid);
|
m_txrequest.DisconnectedPeer(nodeid);
|
||||||
|
if (m_txreconciliation) m_txreconciliation->ForgetPeer(nodeid);
|
||||||
m_num_preferred_download_peers -= state->fPreferredDownload;
|
m_num_preferred_download_peers -= state->fPreferredDownload;
|
||||||
m_peers_downloading_from -= (state->nBlocksInFlight != 0);
|
m_peers_downloading_from -= (state->nBlocksInFlight != 0);
|
||||||
assert(m_peers_downloading_from >= 0);
|
assert(m_peers_downloading_from >= 0);
|
||||||
|
|||||||
@@ -54,6 +54,15 @@ public:
|
|||||||
Assert(m_states.emplace(peer_id, local_salt).second);
|
Assert(m_states.emplace(peer_id, local_salt).second);
|
||||||
return local_salt;
|
return local_salt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ForgetPeer(NodeId peer_id) EXCLUSIVE_LOCKS_REQUIRED(!m_txreconciliation_mutex)
|
||||||
|
{
|
||||||
|
AssertLockNotHeld(m_txreconciliation_mutex);
|
||||||
|
LOCK(m_txreconciliation_mutex);
|
||||||
|
if (m_states.erase(peer_id)) {
|
||||||
|
LogPrintLevel(BCLog::TXRECONCILIATION, BCLog::Level::Debug, "Forget txreconciliation state of peer=%d\n", peer_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TxReconciliationTracker::TxReconciliationTracker() : m_impl{std::make_unique<TxReconciliationTracker::Impl>()} {}
|
TxReconciliationTracker::TxReconciliationTracker() : m_impl{std::make_unique<TxReconciliationTracker::Impl>()} {}
|
||||||
@@ -64,3 +73,8 @@ uint64_t TxReconciliationTracker::PreRegisterPeer(NodeId peer_id)
|
|||||||
{
|
{
|
||||||
return m_impl->PreRegisterPeer(peer_id);
|
return m_impl->PreRegisterPeer(peer_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TxReconciliationTracker::ForgetPeer(NodeId peer_id)
|
||||||
|
{
|
||||||
|
m_impl->ForgetPeer(peer_id);
|
||||||
|
}
|
||||||
@@ -61,6 +61,12 @@ public:
|
|||||||
* This function must be called only once per peer.
|
* This function must be called only once per peer.
|
||||||
*/
|
*/
|
||||||
uint64_t PreRegisterPeer(NodeId peer_id);
|
uint64_t PreRegisterPeer(NodeId peer_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to forget txreconciliation-related state of the peer (if we previously stored any).
|
||||||
|
* After this, we won't be able to reconcile transactions with the peer.
|
||||||
|
*/
|
||||||
|
void ForgetPeer(NodeId peer_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BITCOIN_NODE_TXRECONCILIATION_H
|
#endif // BITCOIN_NODE_TXRECONCILIATION_H
|
||||||
Reference in new issue
Block a user