Skip to content

Commit 7498a38

Browse files
committed
refactor: move PeerManager out of CSigningManager ctor
1 parent 7ebc61e commit 7498a38

File tree

5 files changed

+39
-34
lines changed

5 files changed

+39
-34
lines changed

src/llmq/context.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ LLMQContext::LLMQContext(ChainstateManager& chainman, CConnman& connman, CDeterm
3333
qman{std::make_unique<llmq::CQuorumManager>(*bls_worker, chainman.ActiveChainstate(), dmnman, *qdkgsman, evo_db,
3434
*quorum_block_processor, mn_activeman, mn_sync, sporkman, unit_tests,
3535
wipe)},
36-
sigman{std::make_unique<llmq::CSigningManager>(mn_activeman, chainman.ActiveChainstate(), *qman, peerman,
37-
unit_tests, wipe)},
36+
sigman{std::make_unique<llmq::CSigningManager>(mn_activeman, chainman.ActiveChainstate(), *qman, unit_tests, wipe)},
3837
shareman{std::make_unique<llmq::CSigSharesManager>(connman, *sigman, mn_activeman, *qman, sporkman, peerman)},
3938
clhandler{[&]() -> llmq::CChainLocksHandler* const {
4039
assert(llmq::chainLocksHandler == nullptr);
@@ -85,7 +84,7 @@ void LLMQContext::Start(CConnman& connman, PeerManager& peerman)
8584
qman->Start();
8685
shareman->RegisterAsRecoveredSigsListener();
8786
shareman->StartWorkerThread();
88-
sigman->StartWorkerThread();
87+
sigman->StartWorkerThread(peerman);
8988

9089
llmq::chainLocksHandler->Start();
9190
llmq::quorumInstantSendManager->Start();

src/llmq/signing.cpp

+25-20
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,11 @@ void CRecoveredSigsDb::CleanupOldVotes(int64_t maxAge)
349349
//////////////////
350350

351351
CSigningManager::CSigningManager(const CActiveMasternodeManager* const mn_activeman, const CChainState& chainstate,
352-
const CQuorumManager& _qman, const std::unique_ptr<PeerManager>& peerman, bool fMemory, bool fWipe) :
353-
db(fMemory, fWipe), m_mn_activeman(mn_activeman), m_chainstate(chainstate), qman(_qman), m_peerman(peerman)
352+
const CQuorumManager& _qman, bool fMemory, bool fWipe) :
353+
db(fMemory, fWipe),
354+
m_mn_activeman(mn_activeman),
355+
m_chainstate(chainstate),
356+
qman(_qman)
354357
{
355358
}
356359

@@ -381,13 +384,14 @@ bool CSigningManager::GetRecoveredSigForGetData(const uint256& hash, CRecoveredS
381384
return true;
382385
}
383386

384-
PeerMsgRet CSigningManager::ProcessMessage(const CNode& pfrom, const std::string& msg_type, CDataStream& vRecv)
387+
PeerMsgRet CSigningManager::ProcessMessage(const CNode& pfrom, PeerManager& peerman, const std::string& msg_type,
388+
CDataStream& vRecv)
385389
{
386390
if (msg_type == NetMsgType::QSIGREC) {
387391
auto recoveredSig = std::make_shared<CRecoveredSig>();
388392
vRecv >> *recoveredSig;
389393

390-
return ProcessMessageRecoveredSig(pfrom, recoveredSig);
394+
return ProcessMessageRecoveredSig(pfrom, peerman, recoveredSig);
391395
}
392396
return {};
393397
}
@@ -416,10 +420,11 @@ static bool PreVerifyRecoveredSig(const CQuorumManager& quorum_manager, const CR
416420
return true;
417421
}
418422

419-
PeerMsgRet CSigningManager::ProcessMessageRecoveredSig(const CNode& pfrom, const std::shared_ptr<const CRecoveredSig>& recoveredSig)
423+
PeerMsgRet CSigningManager::ProcessMessageRecoveredSig(const CNode& pfrom, PeerManager& peerman,
424+
const std::shared_ptr<const CRecoveredSig>& recoveredSig)
420425
{
421-
WITH_LOCK(::cs_main, Assert(m_peerman)->EraseObjectRequest(pfrom.GetId(),
422-
CInv(MSG_QUORUM_RECOVERED_SIG, recoveredSig->GetHash())));
426+
WITH_LOCK(::cs_main,
427+
peerman.EraseObjectRequest(pfrom.GetId(), CInv(MSG_QUORUM_RECOVERED_SIG, recoveredSig->GetHash())));
423428

424429
bool ban = false;
425430
if (!PreVerifyRecoveredSig(qman, *recoveredSig, ban)) {
@@ -517,22 +522,22 @@ void CSigningManager::CollectPendingRecoveredSigsToVerify(
517522
}
518523
}
519524

520-
void CSigningManager::ProcessPendingReconstructedRecoveredSigs()
525+
void CSigningManager::ProcessPendingReconstructedRecoveredSigs(PeerManager& peerman)
521526
{
522527
decltype(pendingReconstructedRecoveredSigs) m;
523528
WITH_LOCK(cs_pending, swap(m, pendingReconstructedRecoveredSigs));
524529

525530
for (const auto& p : m) {
526-
ProcessRecoveredSig(p.second);
531+
ProcessRecoveredSig(p.second, peerman);
527532
}
528533
}
529534

530-
bool CSigningManager::ProcessPendingRecoveredSigs()
535+
bool CSigningManager::ProcessPendingRecoveredSigs(PeerManager& peerman)
531536
{
532537
std::unordered_map<NodeId, std::list<std::shared_ptr<const CRecoveredSig>>> recSigsByNode;
533538
std::unordered_map<std::pair<Consensus::LLMQType, uint256>, CQuorumCPtr, StaticSaltedHasher> quorums;
534539

535-
ProcessPendingReconstructedRecoveredSigs();
540+
ProcessPendingReconstructedRecoveredSigs(peerman);
536541

537542
const size_t nMaxBatchSize{32};
538543
CollectPendingRecoveredSigsToVerify(nMaxBatchSize, recSigsByNode, quorums);
@@ -575,7 +580,7 @@ bool CSigningManager::ProcessPendingRecoveredSigs()
575580

576581
if (batchVerifier.badSources.count(nodeId)) {
577582
LogPrint(BCLog::LLMQ, "CSigningManager::%s -- invalid recSig from other node, banning peer=%d\n", __func__, nodeId);
578-
Assert(m_peerman)->Misbehaving(nodeId, 100);
583+
peerman.Misbehaving(nodeId, 100);
579584
continue;
580585
}
581586

@@ -584,15 +589,15 @@ bool CSigningManager::ProcessPendingRecoveredSigs()
584589
continue;
585590
}
586591

587-
ProcessRecoveredSig(recSig);
592+
ProcessRecoveredSig(recSig, peerman);
588593
}
589594
}
590595

591596
return recSigsByNode.size() >= nMaxBatchSize;
592597
}
593598

594599
// signature must be verified already
595-
void CSigningManager::ProcessRecoveredSig(const std::shared_ptr<const CRecoveredSig>& recoveredSig)
600+
void CSigningManager::ProcessRecoveredSig(const std::shared_ptr<const CRecoveredSig>& recoveredSig, PeerManager& peerman)
596601
{
597602
auto llmqType = recoveredSig->getLlmqType();
598603

@@ -631,12 +636,12 @@ void CSigningManager::ProcessRecoveredSig(const std::shared_ptr<const CRecovered
631636
WITH_LOCK(cs_pending, pendingReconstructedRecoveredSigs.erase(recoveredSig->GetHash()));
632637

633638
if (m_mn_activeman != nullptr) {
634-
Assert(m_peerman)->RelayRecoveredSig(recoveredSig->GetHash());
639+
peerman.RelayRecoveredSig(recoveredSig->GetHash());
635640
}
636641

637642
auto listeners = WITH_LOCK(cs_listeners, return recoveredSigsListeners);
638643
for (auto& l : listeners) {
639-
Assert(m_peerman)->PostProcessMessage(l->HandleNewRecoveredSig(*recoveredSig));
644+
peerman.PostProcessMessage(l->HandleNewRecoveredSig(*recoveredSig));
640645
}
641646

642647
GetMainSignals().NotifyRecoveredSig(recoveredSig);
@@ -799,14 +804,14 @@ bool CSigningManager::GetVoteForId(Consensus::LLMQType llmqType, const uint256&
799804
return db.GetVoteForId(llmqType, id, msgHashRet);
800805
}
801806

802-
void CSigningManager::StartWorkerThread()
807+
void CSigningManager::StartWorkerThread(PeerManager& peerman)
803808
{
804809
// can't start new thread if we have one running already
805810
if (workThread.joinable()) {
806811
assert(false);
807812
}
808813

809-
workThread = std::thread(&util::TraceThread, "sigshares", [this] { WorkThreadMain(); });
814+
workThread = std::thread(&util::TraceThread, "sigshares", [this, &peerman] { WorkThreadMain(peerman); });
810815
}
811816

812817
void CSigningManager::StopWorkerThread()
@@ -826,10 +831,10 @@ void CSigningManager::InterruptWorkerThread()
826831
workInterrupt();
827832
}
828833

829-
void CSigningManager::WorkThreadMain()
834+
void CSigningManager::WorkThreadMain(PeerManager& peerman)
830835
{
831836
while (!workInterrupt) {
832-
bool fMoreWork = ProcessPendingRecoveredSigs();
837+
bool fMoreWork = ProcessPendingRecoveredSigs(peerman);
833838

834839
Cleanup();
835840

src/llmq/signing.h

+10-9
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ class CSigningManager
162162
const CActiveMasternodeManager* const m_mn_activeman;
163163
const CChainState& m_chainstate;
164164
const CQuorumManager& qman;
165-
const std::unique_ptr<PeerManager>& m_peerman;
166165

167166
mutable Mutex cs_pending;
168167
// Incoming and not verified yet
@@ -178,12 +177,12 @@ class CSigningManager
178177

179178
public:
180179
CSigningManager(const CActiveMasternodeManager* const mn_activeman, const CChainState& chainstate,
181-
const CQuorumManager& _qman, const std::unique_ptr<PeerManager>& peerman, bool fMemory, bool fWipe);
180+
const CQuorumManager& _qman, bool fMemory, bool fWipe);
182181

183182
bool AlreadyHave(const CInv& inv) const;
184183
bool GetRecoveredSigForGetData(const uint256& hash, CRecoveredSig& ret) const;
185184

186-
PeerMsgRet ProcessMessage(const CNode& pnode, const std::string& msg_type, CDataStream& vRecv);
185+
PeerMsgRet ProcessMessage(const CNode& pnode, PeerManager& peerman, const std::string& msg_type, CDataStream& vRecv);
187186

188187
// This is called when a recovered signature was was reconstructed from another P2P message and is known to be valid
189188
// This is the case for example when a signature appears as part of InstantSend or ChainLocks
@@ -196,16 +195,18 @@ class CSigningManager
196195
void TruncateRecoveredSig(Consensus::LLMQType llmqType, const uint256& id);
197196

198197
private:
199-
PeerMsgRet ProcessMessageRecoveredSig(const CNode& pfrom, const std::shared_ptr<const CRecoveredSig>& recoveredSig);
198+
PeerMsgRet ProcessMessageRecoveredSig(const CNode& pfrom, PeerManager& peerman,
199+
const std::shared_ptr<const CRecoveredSig>& recoveredSig);
200200

201201
void CollectPendingRecoveredSigsToVerify(size_t maxUniqueSessions,
202202
std::unordered_map<NodeId, std::list<std::shared_ptr<const CRecoveredSig>>>& retSigShares,
203203
std::unordered_map<std::pair<Consensus::LLMQType, uint256>, CQuorumCPtr, StaticSaltedHasher>& retQuorums);
204-
void ProcessPendingReconstructedRecoveredSigs();
205-
bool ProcessPendingRecoveredSigs(); // called from the worker thread of CSigSharesManager
204+
void ProcessPendingReconstructedRecoveredSigs(PeerManager& peerman);
205+
bool ProcessPendingRecoveredSigs(PeerManager& peerman); // called from the worker thread of CSigSharesManager
206206
public:
207207
// TODO - should not be public!
208-
void ProcessRecoveredSig(const std::shared_ptr<const CRecoveredSig>& recoveredSig);
208+
void ProcessRecoveredSig(const std::shared_ptr<const CRecoveredSig>& recoveredSig, PeerManager& peerman);
209+
209210
private:
210211
void Cleanup(); // called from the worker thread of CSigSharesManager
211212

@@ -228,10 +229,10 @@ class CSigningManager
228229
private:
229230
std::thread workThread;
230231
CThreadInterrupt workInterrupt;
231-
void WorkThreadMain();
232+
void WorkThreadMain(PeerManager& peerman);
232233

233234
public:
234-
void StartWorkerThread();
235+
void StartWorkerThread(PeerManager& peerman);
235236
void StopWorkerThread();
236237
void InterruptWorkerThread();
237238
};

src/llmq/signing_shares.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ void CSigSharesManager::TryRecoverSig(const CQuorumCPtr& quorum, const uint256&
817817
}
818818
}
819819

820-
sigman.ProcessRecoveredSig(rs);
820+
sigman.ProcessRecoveredSig(rs, *m_peerman);
821821
}
822822

823823
CDeterministicMNCPtr CSigSharesManager::SelectMemberForRecovery(const CQuorumCPtr& quorum, const uint256 &id, int attempt)

src/net_processing.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -5265,7 +5265,7 @@ void PeerManagerImpl::ProcessMessage(
52655265
ProcessPeerMsgRet(m_llmq_ctx->qdkgsman->ProcessMessage(pfrom, *this, is_masternode, msg_type, vRecv), pfrom);
52665266
ProcessPeerMsgRet(m_llmq_ctx->qman->ProcessMessage(pfrom, m_connman, msg_type, vRecv), pfrom);
52675267
m_llmq_ctx->shareman->ProcessMessage(pfrom, m_sporkman, msg_type, vRecv);
5268-
ProcessPeerMsgRet(m_llmq_ctx->sigman->ProcessMessage(pfrom, msg_type, vRecv), pfrom);
5268+
ProcessPeerMsgRet(m_llmq_ctx->sigman->ProcessMessage(pfrom, *this, msg_type, vRecv), pfrom);
52695269

52705270
if (msg_type == NetMsgType::CLSIG) {
52715271
if (llmq::AreChainLocksEnabled(m_sporkman)) {

0 commit comments

Comments
 (0)