Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/bls/bls_worker.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ class CBLSWorker
std::vector<SigVerifyJob> sigVerifyQueue;

public:
CBLSWorker(const CBLSWorker&) = delete;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: do you know that you already can't create a copy of CBLSWorker?

All classes that has a non-copyable member are uncoppyable too.
CBLSWorker have 2 of them:

  • std::mutex sigVerifyMutex;
  • ctpl::thread_pool workerPool

Same applieable for CChainLocksHandler; un-copyable members:

  • std::unique_ptr scheduler;
  • std::unique_ptrstd::thread scheduler_thread;
  • mutable Mutex cs;
  • std::atomic tryLockChainTipScheduled{false};
  • std::atomic isEnabled{false};

And almost every other class in this PR.

Error message as reference:

error: use of deleted function ‘CBLSWorker::CBLSWorker(const CBLSWorker&)’
   92 |     const auto worker = blsWorker;
      |                         ^~~~~~~~~

./bls/bls_worker.h:20:7: note: ‘CBLSWorker::CBLSWorker(const CBLSWorker&)’ is implicitly deleted because the default definition would be ill-formed:
   20 | class CBLSWorker
      |       ^~~~~~~~~~
./bls/bls_worker.h: At global scope:
./bls/bls_worker.h:20:7: error: ‘ctpl::thread_pool::thread_pool(const ctpl::thread_pool&)’ is private within this context
In file included from ./bls/bls_worker.h:10:
./ctpl_stl.h:206:9: note: declared private here
  206 |         thread_pool(const thread_pool &);// = delete;
      |         ^~~~~~~~~~~
./bls/bls_worker.h:20:7: error: use of deleted function ‘std::mutex::mutex(const std::mutex&)’
   20 | class CBLSWorker
      |       ^~~~~~~~~~
In file included from /usr/include/c++/15/bits/atomic_wait.h:53,
                 from /usr/include/c++/15/bits/atomic_base.h:43,
                 from /usr/include/c++/15/atomic:52,
                 from ./serialize.h:12,
                 from ./script/script.h:12,
                 from ./primitives/transaction.h:11,
                 from ./llmq/commitment.h:8,
                 from ./llmq/dkgsession.h:8:
/usr/include/c++/15/bits/std_mutex.h:109:5: note: declared here
  109 |     mutex(const mutex&) = delete;
      |     ^~~~~

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am aware but I'd like this the non-copyable property to be inherent to the class definition and not reliant on the state of its members that are subject to change.

CBLSWorker& operator=(CBLSWorker const&) = delete;
CBLSWorker();
~CBLSWorker();

Expand Down
3 changes: 3 additions & 0 deletions src/chainlock/chainlock.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ class CChainLocksHandler final : public chainlock::ChainLockSignerParent
std::atomic<std::chrono::seconds> lastCleanupTime{0s};

public:
CChainLocksHandler() = delete;
CChainLocksHandler(const CChainLocksHandler&) = delete;
CChainLocksHandler& operator=(const CChainLocksHandler&) = delete;
explicit CChainLocksHandler(CChainState& chainstate, CQuorumManager& _qman, CSporkManager& sporkman,
CTxMemPool& _mempool, const CMasternodeSync& mn_sync);
~CChainLocksHandler();
Expand Down
3 changes: 3 additions & 0 deletions src/instantsend/instantsend.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ class CInstantSendManager final : public instantsend::InstantSendSignerParent
Uint256HashMap<int64_t> timingsTxSeen GUARDED_BY(cs_timingsTxSeen);

public:
CInstantSendManager() = delete;
CInstantSendManager(const CInstantSendManager&) = delete;
CInstantSendManager& operator=(const CInstantSendManager&) = delete;
explicit CInstantSendManager(CChainLocksHandler& _clhandler, CChainState& chainstate, CQuorumManager& _qman,
CSigningManager& _sigman, CSporkManager& sporkman, CTxMemPool& _mempool,
const CMasternodeSync& mn_sync, bool unitTests, bool fWipe);
Expand Down
13 changes: 8 additions & 5 deletions src/llmq/blockprocessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ static const std::string DB_BEST_BLOCK_UPGRADE = "q_bbu2";

CQuorumBlockProcessor::CQuorumBlockProcessor(CChainState& chainstate, CDeterministicMNManager& dmnman, CEvoDB& evoDb,
CQuorumSnapshotManager& qsnapman) :
m_chainstate(chainstate),
m_dmnman(dmnman),
m_evoDb(evoDb),
m_qsnapman(qsnapman)
m_chainstate{chainstate},
m_dmnman{dmnman},
m_evoDb{evoDb},
m_qsnapman{qsnapman}
{
utils::InitQuorumsCache(mapHasMinedCommitmentCache);

Expand All @@ -70,7 +70,10 @@ CQuorumBlockProcessor::CQuorumBlockProcessor(CChainState& chainstate, CDetermini
m_bls_queue.StartWorkerThreads(bls_threads);
}

CQuorumBlockProcessor::~CQuorumBlockProcessor() { m_bls_queue.StopWorkerThreads(); }
CQuorumBlockProcessor::~CQuorumBlockProcessor()
{
m_bls_queue.StopWorkerThreads();
}

MessageProcessingResult CQuorumBlockProcessor::ProcessMessage(const CNode& peer, std::string_view msg_type,
CDataStream& vRecv)
Expand Down
3 changes: 3 additions & 0 deletions src/llmq/blockprocessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class CQuorumBlockProcessor
mutable std::map<Consensus::LLMQType, Uint256LruHashMap<bool>> mapHasMinedCommitmentCache GUARDED_BY(minableCommitmentsCs);

public:
CQuorumBlockProcessor() = delete;
CQuorumBlockProcessor(const CQuorumBlockProcessor&) = delete;
CQuorumBlockProcessor& operator=(const CQuorumBlockProcessor&) = delete;
explicit CQuorumBlockProcessor(CChainState& chainstate, CDeterministicMNManager& dmnman, CEvoDB& evoDb,
CQuorumSnapshotManager& qsnapman);
~CQuorumBlockProcessor();
Expand Down
9 changes: 5 additions & 4 deletions src/llmq/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,11 @@ struct LLMQContext {
public:
LLMQContext() = delete;
LLMQContext(const LLMQContext&) = delete;
LLMQContext(ChainstateManager& chainman, CDeterministicMNManager& dmnman, CEvoDB& evo_db,
CMasternodeMetaMan& mn_metaman, CMNHFManager& mnhfman, CSporkManager& sporkman, CTxMemPool& mempool,
const CActiveMasternodeManager* const mn_activeman, const CMasternodeSync& mn_sync, bool unit_tests,
bool wipe);
LLMQContext& operator=(const LLMQContext&) = delete;
explicit LLMQContext(ChainstateManager& chainman, CDeterministicMNManager& dmnman, CEvoDB& evo_db,
CMasternodeMetaMan& mn_metaman, CMNHFManager& mnhfman, CSporkManager& sporkman,
CTxMemPool& mempool, const CActiveMasternodeManager* const mn_activeman,
const CMasternodeSync& mn_sync, bool unit_tests, bool wipe);
~LLMQContext();

void Interrupt();
Expand Down
2 changes: 2 additions & 0 deletions src/llmq/debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ UniValue CDKGDebugSessionStatus::ToJson(CDeterministicMNManager& dmnman, CQuorum

CDKGDebugManager::CDKGDebugManager() = default;

CDKGDebugManager::~CDKGDebugManager() = default;

UniValue CDKGDebugStatus::ToJson(CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman,
const ChainstateManager& chainman, int detailLevel) const
{
Expand Down
3 changes: 3 additions & 0 deletions src/llmq/debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,10 @@ class CDKGDebugManager
CDKGDebugStatus localStatus GUARDED_BY(cs_lockStatus);

public:
CDKGDebugManager(const CDKGDebugManager&) = delete;
CDKGDebugManager& operator=(const CDKGDebugManager&) = delete;
CDKGDebugManager();
~CDKGDebugManager();

void GetLocalDebugStatus(CDKGDebugStatus& ret) const EXCLUSIVE_LOCKS_REQUIRED(!cs_lockStatus);

Expand Down
16 changes: 8 additions & 8 deletions src/llmq/dkgsessionmgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ CDKGSessionManager::CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chai
CQuorumBlockProcessor& _quorumBlockProcessor, CQuorumSnapshotManager& qsnapman,
const CActiveMasternodeManager* const mn_activeman,
const CSporkManager& sporkman, bool unitTests, bool fWipe) :
db(std::make_unique<CDBWrapper>(unitTests ? "" : (gArgs.GetDataDirNet() / "llmq/dkgdb"), 1 << 20, unitTests, fWipe)),
blsWorker(_blsWorker),
m_chainstate(chainstate),
m_dmnman(dmnman),
dkgDebugManager(_dkgDebugManager),
quorumBlockProcessor(_quorumBlockProcessor),
m_qsnapman(qsnapman),
spork_manager(sporkman)
db{std::make_unique<CDBWrapper>(unitTests ? "" : (gArgs.GetDataDirNet() / "llmq/dkgdb"), 1 << 20, unitTests, fWipe)},
blsWorker{_blsWorker},
m_chainstate{chainstate},
m_dmnman{dmnman},
dkgDebugManager{_dkgDebugManager},
quorumBlockProcessor{_quorumBlockProcessor},
m_qsnapman{qsnapman},
spork_manager{sporkman}
{
if (mn_activeman == nullptr && !IsWatchQuorumsEnabled()) {
// Regular nodes do not care about any DKG internals, bail out
Expand Down
13 changes: 8 additions & 5 deletions src/llmq/dkgsessionmgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,14 @@ class CDKGSessionManager
mutable std::map<ContributionsCacheKey, ContributionsCacheEntry> contributionsCache GUARDED_BY(contributionsCacheCs);

public:
CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
CQuorumBlockProcessor& _quorumBlockProcessor, CQuorumSnapshotManager& qsnapman,
const CActiveMasternodeManager* const mn_activeman, const CSporkManager& sporkman,
bool unitTests, bool fWipe);
CDKGSessionManager() = delete;
CDKGSessionManager(const CDKGSessionManager&) = delete;
CDKGSessionManager& operator=(const CDKGSessionManager&) = delete;
explicit CDKGSessionManager(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
CQuorumBlockProcessor& _quorumBlockProcessor, CQuorumSnapshotManager& qsnapman,
const CActiveMasternodeManager* const mn_activeman, const CSporkManager& sporkman,
bool unitTests, bool fWipe);
~CDKGSessionManager();

void StartThreads(CConnman& connman, PeerManager& peerman);
Expand Down
27 changes: 15 additions & 12 deletions src/llmq/quorums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,24 +212,27 @@ CQuorumManager::CQuorumManager(CBLSWorker& _blsWorker, CChainState& chainstate,
CQuorumBlockProcessor& _quorumBlockProcessor, CQuorumSnapshotManager& qsnapman,
const CActiveMasternodeManager* const mn_activeman, const CMasternodeSync& mn_sync,
const CSporkManager& sporkman, bool unit_tests, bool wipe) :
db(std::make_unique<CDBWrapper>(unit_tests ? "" : (gArgs.GetDataDirNet() / "llmq" / "quorumdb"), 1 << 20,
unit_tests, wipe)),
blsWorker(_blsWorker),
m_chainstate(chainstate),
m_dmnman(dmnman),
dkgManager(_dkgManager),
quorumBlockProcessor(_quorumBlockProcessor),
m_qsnapman(qsnapman),
m_mn_activeman(mn_activeman),
m_mn_sync(mn_sync),
m_sporkman(sporkman)
db{std::make_unique<CDBWrapper>(unit_tests ? "" : (gArgs.GetDataDirNet() / "llmq" / "quorumdb"), 1 << 20,
unit_tests, wipe)},
blsWorker{_blsWorker},
m_chainstate{chainstate},
m_dmnman{dmnman},
dkgManager{_dkgManager},
quorumBlockProcessor{_quorumBlockProcessor},
m_qsnapman{qsnapman},
m_mn_activeman{mn_activeman},
m_mn_sync{mn_sync},
m_sporkman{sporkman}
Comment on lines +214 to +225
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kwvg, thank you for resolving the clang-format issue! 🎉

Comment thread
kwvg marked this conversation as resolved.
{
utils::InitQuorumsCache(mapQuorumsCache, false);
quorumThreadInterrupt.reset();
MigrateOldQuorumDB(_evoDb);
}

CQuorumManager::~CQuorumManager() { Stop(); }
CQuorumManager::~CQuorumManager()
{
Stop();
}

void CQuorumManager::Start()
{
Expand Down
11 changes: 7 additions & 4 deletions src/llmq/quorums.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,10 +259,13 @@ class CQuorumManager
mutable CThreadInterrupt quorumThreadInterrupt;

public:
CQuorumManager(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
CDKGSessionManager& _dkgManager, CEvoDB& _evoDb, CQuorumBlockProcessor& _quorumBlockProcessor,
CQuorumSnapshotManager& qsnapman, const CActiveMasternodeManager* const mn_activeman,
const CMasternodeSync& mn_sync, const CSporkManager& sporkman, bool unit_tests, bool wipe);
CQuorumManager() = delete;
CQuorumManager(const CQuorumManager&) = delete;
CQuorumManager& operator=(const CQuorumManager&) = delete;
explicit CQuorumManager(CBLSWorker& _blsWorker, CChainState& chainstate, CDeterministicMNManager& dmnman,
CDKGSessionManager& _dkgManager, CEvoDB& _evoDb, CQuorumBlockProcessor& _quorumBlockProcessor,
CQuorumSnapshotManager& qsnapman, const CActiveMasternodeManager* const mn_activeman,
const CMasternodeSync& mn_sync, const CSporkManager& sporkman, bool unit_tests, bool wipe);
~CQuorumManager();

void Start();
Expand Down
8 changes: 5 additions & 3 deletions src/llmq/signing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -333,12 +333,14 @@ void CRecoveredSigsDb::CleanupOldVotes(int64_t maxAge)
//////////////////

CSigningManager::CSigningManager(const CChainState& chainstate, const CQuorumManager& _qman, bool fMemory, bool fWipe) :
db(fMemory, fWipe),
m_chainstate(chainstate),
qman(_qman)
db{fMemory, fWipe},
m_chainstate{chainstate},
qman{_qman}
{
}

CSigningManager::~CSigningManager() = default;

Comment thread
kwvg marked this conversation as resolved.
bool CSigningManager::AlreadyHave(const CInv& inv) const
{
if (inv.type != MSG_QUORUM_RECOVERED_SIG) {
Expand Down
6 changes: 5 additions & 1 deletion src/llmq/signing.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,11 @@ class CSigningManager
std::vector<CRecoveredSigsListener*> recoveredSigsListeners GUARDED_BY(cs_listeners);

public:
CSigningManager(const CChainState& chainstate, const CQuorumManager& _qman, bool fMemory, bool fWipe);
CSigningManager() = delete;
CSigningManager(const CSigningManager&) = delete;
CSigningManager& operator=(const CSigningManager&) = delete;
explicit CSigningManager(const CChainState& chainstate, const CQuorumManager& _qman, bool fMemory, bool fWipe);
~CSigningManager();

Comment thread
kwvg marked this conversation as resolved.
bool AlreadyHave(const CInv& inv) const EXCLUSIVE_LOCKS_REQUIRED(!cs_pending);
bool GetRecoveredSigForGetData(const uint256& hash, CRecoveredSig& ret) const;
Expand Down
5 changes: 3 additions & 2 deletions src/llmq/signing_shares.h
Original file line number Diff line number Diff line change
Expand Up @@ -416,13 +416,14 @@ class CSigSharesManager : public CRecoveredSigsListener
std::atomic<uint32_t> recoveredSigsCounter{0};

public:
CSigSharesManager() = delete;
CSigSharesManager(const CSigSharesManager&) = delete;
CSigSharesManager& operator=(const CSigSharesManager&) = delete;
explicit CSigSharesManager(CConnman& connman, CChainState& chainstate, CSigningManager& _sigman,
PeerManager& peerman, const CActiveMasternodeManager& mn_activeman,
const CQuorumManager& _qman, const CSporkManager& sporkman);
~CSigSharesManager() override;

CSigSharesManager() = delete;

void StartWorkerThread();
void StopWorkerThread();
void RegisterAsRecoveredSigsListener();
Expand Down
8 changes: 8 additions & 0 deletions src/llmq/snapshot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,14 @@ uint256 GetLastBaseBlockHash(Span<const CBlockIndex*> baseBlockIndexes, const CB
return hash;
}

CQuorumSnapshotManager::CQuorumSnapshotManager(CEvoDB& evoDb) :
m_evoDb{evoDb},
quorumSnapshotCache{32}
{
}

CQuorumSnapshotManager::~CQuorumSnapshotManager() = default;

std::optional<CQuorumSnapshot> CQuorumSnapshotManager::GetSnapshotForBlock(const Consensus::LLMQType llmqType, const CBlockIndex* pindex)
{
CQuorumSnapshot snapshot = {};
Expand Down
7 changes: 5 additions & 2 deletions src/llmq/snapshot.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,11 @@ class CQuorumSnapshotManager
Uint256LruHashMap<CQuorumSnapshot> quorumSnapshotCache GUARDED_BY(snapshotCacheCs);

public:
explicit CQuorumSnapshotManager(CEvoDB& evoDb) :
m_evoDb(evoDb), quorumSnapshotCache(32) {}
CQuorumSnapshotManager() = delete;
CQuorumSnapshotManager(const CQuorumSnapshotManager&) = delete;
CQuorumSnapshotManager& operator=(const CQuorumSnapshotManager&) = delete;
explicit CQuorumSnapshotManager(CEvoDB& evoDb);
~CQuorumSnapshotManager();

std::optional<CQuorumSnapshot> GetSnapshotForBlock(Consensus::LLMQType llmqType, const CBlockIndex* pindex);
void StoreSnapshotForBlock(Consensus::LLMQType llmqType, const CBlockIndex* pindex, const CQuorumSnapshot& snapshot);
Expand Down