Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13711388
D12118.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
D12118.diff
View Options
diff --git a/src/avalanche/test/processor_tests.cpp b/src/avalanche/test/processor_tests.cpp
--- a/src/avalanche/test/processor_tests.cpp
+++ b/src/avalanche/test/processor_tests.cpp
@@ -103,7 +103,7 @@
m_node.connman = std::move(connman);
m_node.peerman = ::PeerManager::make(
config.GetChainParams(), *m_connman, m_node.banman.get(),
- *m_node.scheduler, *m_node.chainman, *m_node.mempool, false);
+ *m_node.chainman, *m_node.mempool, false);
m_node.chain = interfaces::MakeChain(m_node, config.GetChainParams());
// Get the processor ready.
diff --git a/src/init.cpp b/src/init.cpp
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -2388,10 +2388,9 @@
ChainstateManager &chainman = *node.chainman;
assert(!node.peerman);
- node.peerman =
- PeerManager::make(chainparams, *node.connman, node.banman.get(),
- *node.scheduler, chainman, *node.mempool,
- args.GetBoolArg("-blocksonly", DEFAULT_BLOCKSONLY));
+ node.peerman = PeerManager::make(
+ chainparams, *node.connman, node.banman.get(), chainman, *node.mempool,
+ args.GetBoolArg("-blocksonly", DEFAULT_BLOCKSONLY));
RegisterValidationInterface(node.peerman.get());
// sanitize comments per BIP-0014, format user agent and check total size
@@ -3159,6 +3158,10 @@
},
DUMP_BANS_INTERVAL);
+ if (node.peerman) {
+ node.peerman->StartScheduledTasks(*node.scheduler);
+ }
+
// Start Avalanche's event loop.
g_avalanche->startEventLoop(*node.scheduler);
diff --git a/src/net_processing.h b/src/net_processing.h
--- a/src/net_processing.h
+++ b/src/net_processing.h
@@ -49,12 +49,16 @@
class PeerManager : public CValidationInterface, public NetEventsInterface {
public:
- static std::unique_ptr<PeerManager>
- make(const CChainParams &chainparams, CConnman &connman, BanMan *banman,
- CScheduler &scheduler, ChainstateManager &chainman, CTxMemPool &pool,
- bool ignore_incoming_txs);
+ static std::unique_ptr<PeerManager> make(const CChainParams &chainparams,
+ CConnman &connman, BanMan *banman,
+ ChainstateManager &chainman,
+ CTxMemPool &pool,
+ bool ignore_incoming_txs);
virtual ~PeerManager() {}
+ /** Begin running background tasks, should only be called once */
+ virtual void StartScheduledTasks(CScheduler &scheduler) = 0;
+
/** Get statistics from node state */
virtual bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats) = 0;
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -464,9 +464,8 @@
class PeerManagerImpl final : public PeerManager {
public:
PeerManagerImpl(const CChainParams &chainparams, CConnman &connman,
- BanMan *banman, CScheduler &scheduler,
- ChainstateManager &chainman, CTxMemPool &pool,
- bool ignore_incoming_txs);
+ BanMan *banman, ChainstateManager &chainman,
+ CTxMemPool &pool, bool ignore_incoming_txs);
/** Overridden from CValidationInterface. */
void BlockConnected(const std::shared_ptr<const CBlock> &pblock,
@@ -491,6 +490,7 @@
EXCLUSIVE_LOCKS_REQUIRED(pto->cs_sendProcessing);
/** Implement PeerManager */
+ void StartScheduledTasks(CScheduler &scheduler) override;
void CheckForStaleTipAndEvictPeers() override;
bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats) override;
bool IgnoresIncomingTxs() override { return m_ignore_incoming_txs; }
@@ -2049,17 +2049,14 @@
std::unique_ptr<PeerManager>
PeerManager::make(const CChainParams &chainparams, CConnman &connman,
- BanMan *banman, CScheduler &scheduler,
- ChainstateManager &chainman, CTxMemPool &pool,
+ BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool,
bool ignore_incoming_txs) {
- return std::make_unique<PeerManagerImpl>(chainparams, connman, banman,
- scheduler, chainman, pool,
- ignore_incoming_txs);
+ return std::make_unique<PeerManagerImpl>(
+ chainparams, connman, banman, chainman, pool, ignore_incoming_txs);
}
PeerManagerImpl::PeerManagerImpl(const CChainParams &chainparams,
CConnman &connman, BanMan *banman,
- CScheduler &scheduler,
ChainstateManager &chainman, CTxMemPool &pool,
bool ignore_incoming_txs)
: m_chainparams(chainparams), m_connman(connman), m_banman(banman),
@@ -2083,7 +2080,9 @@
// same probability that we have in the reject filter).
m_recent_confirmed_transactions.reset(
new CRollingBloomFilter(24000, 0.000001));
+}
+void PeerManagerImpl::StartScheduledTasks(CScheduler &scheduler) {
// Stale tip checking and peer eviction are on two different timers, but we
// don't want them to get out of sync due to drift in the scheduler, so we
// combine them in one function and schedule at the quicker (peer-eviction)
diff --git a/src/test/denialofservice_tests.cpp b/src/test/denialofservice_tests.cpp
--- a/src/test/denialofservice_tests.cpp
+++ b/src/test/denialofservice_tests.cpp
@@ -68,9 +68,9 @@
auto connman = std::make_unique<CConnman>(config, 0x1337, 0x1337);
// Disable inactivity checks for this test to avoid interference
static_cast<ConnmanTestMsg *>(connman.get())->SetPeerConnectTimeout(99999s);
- auto peerLogic = PeerManager::make(
- config.GetChainParams(), *connman, nullptr, *m_node.scheduler,
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic =
+ PeerManager::make(config.GetChainParams(), *connman, nullptr,
+ *m_node.chainman, *m_node.mempool, false);
// Mock an outbound peer
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
@@ -154,9 +154,9 @@
const Config &config = GetConfig();
auto connman = std::make_unique<CConnmanTest>(config, 0x1337, 0x1337);
- auto peerLogic = PeerManager::make(
- config.GetChainParams(), *connman, nullptr, *m_node.scheduler,
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic =
+ PeerManager::make(config.GetChainParams(), *connman, nullptr,
+ *m_node.chainman, *m_node.mempool, false);
const Consensus::Params &consensusParams =
config.GetChainParams().GetConsensus();
@@ -240,9 +240,9 @@
m_args.GetDataDirBase() / "banlist.dat", config.GetChainParams(),
nullptr, DEFAULT_MISBEHAVING_BANTIME);
auto connman = std::make_unique<CConnman>(config, 0x1337, 0x1337);
- auto peerLogic = PeerManager::make(
- config.GetChainParams(), *connman, banman.get(), *m_node.scheduler,
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic =
+ PeerManager::make(config.GetChainParams(), *connman, banman.get(),
+ *m_node.chainman, *m_node.mempool, false);
banman->ClearBanned();
CAddress addr1(ip(0xa0b0c001), NODE_NONE);
@@ -304,9 +304,9 @@
m_args.GetDataDirBase() / "banlist.dat", config.GetChainParams(),
nullptr, DEFAULT_MISBEHAVING_BANTIME);
auto connman = std::make_unique<CConnman>(config, 0x1337, 0x1337);
- auto peerLogic = PeerManager::make(
- config.GetChainParams(), *connman, banman.get(), *m_node.scheduler,
- *m_node.chainman, *m_node.mempool, false);
+ auto peerLogic =
+ PeerManager::make(config.GetChainParams(), *connman, banman.get(),
+ *m_node.chainman, *m_node.mempool, false);
banman->ClearBanned();
int64_t nStartTime = GetTime();
diff --git a/src/test/net_tests.cpp b/src/test/net_tests.cpp
--- a/src/test/net_tests.cpp
+++ b/src/test/net_tests.cpp
@@ -1166,9 +1166,9 @@
const CChainParams ¶ms = GetConfig().GetChainParams();
m_node.connman = std::make_unique<CConnmanTest>();
- m_node.peerman = PeerManager::make(
- params, *m_node.connman, m_node.banman.get(), *m_node.scheduler,
- *m_node.chainman, *m_node.mempool, false);
+ m_node.peerman =
+ PeerManager::make(params, *m_node.connman, m_node.banman.get(),
+ *m_node.chainman, *m_node.mempool, false);
bilingual_str error;
// Init the global avalanche object otherwise the avalanche outbound
diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp
--- a/src/test/util/setup_common.cpp
+++ b/src/test/util/setup_common.cpp
@@ -236,9 +236,9 @@
DEFAULT_MISBEHAVING_BANTIME);
// Deterministic randomness for tests.
m_node.connman = std::make_unique<CConnman>(config, 0x1337, 0x1337);
- m_node.peerman = PeerManager::make(
- chainparams, *m_node.connman, m_node.banman.get(), *m_node.scheduler,
- *m_node.chainman, *m_node.mempool, false);
+ m_node.peerman =
+ PeerManager::make(chainparams, *m_node.connman, m_node.banman.get(),
+ *m_node.chainman, *m_node.mempool, false);
{
CConnman::Options options;
options.m_msgproc.push_back(m_node.peerman.get());
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 11:50 (2 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573457
Default Alt Text
D12118.diff (9 KB)
Attached To
D12118: Close minor startup race between main and scheduler threads
Event Timeline
Log In to Comment