diff --git a/src/bls/bls_worker.cpp b/src/bls/bls_worker.cpp index f93d8504b2f43..ab286919f75dd 100644 --- a/src/bls/bls_worker.cpp +++ b/src/bls/bls_worker.cpp @@ -51,11 +51,6 @@ std::pair, std::future > BuildFutureDoneCallback2() CBLSWorker::CBLSWorker() { - int workerCount = std::thread::hardware_concurrency() / 2; - workerCount = std::max(std::min(1, workerCount), 4); - workerPool.resize(workerCount); - - RenameThreadPool(workerPool, "bls-worker"); } CBLSWorker::~CBLSWorker() @@ -63,6 +58,14 @@ CBLSWorker::~CBLSWorker() Stop(); } +void CBLSWorker::Start() +{ + int workerCount = std::thread::hardware_concurrency() / 2; + workerCount = std::max(std::min(1, workerCount), 4); + workerPool.resize(workerCount); + RenameThreadPool(workerPool, "bls-worker"); +} + void CBLSWorker::Stop() { workerPool.clear_queue(); diff --git a/src/bls/bls_worker.h b/src/bls/bls_worker.h index 5c1767126b3e6..691163dbb71c5 100644 --- a/src/bls/bls_worker.h +++ b/src/bls/bls_worker.h @@ -53,6 +53,7 @@ class CBLSWorker CBLSWorker(); ~CBLSWorker(); + void Start(); void Stop(); bool GenerateContributions(int threshold, const BLSIdVector& ids, BLSVerificationVectorPtr& vvecRet, BLSSecretKeyVector& skShares); diff --git a/src/llmq/quorums_init.cpp b/src/llmq/quorums_init.cpp index 641be871cbf43..32248264df000 100644 --- a/src/llmq/quorums_init.cpp +++ b/src/llmq/quorums_init.cpp @@ -20,18 +20,19 @@ namespace llmq { -static CBLSWorker blsWorker; +CBLSWorker* blsWorker; CDBWrapper* llmqDb; void InitLLMQSystem(CEvoDB& evoDb, CScheduler* scheduler, bool unitTests) { llmqDb = new CDBWrapper(unitTests ? "" : (GetDataDir() / "llmq"), 1 << 20, unitTests); + blsWorker = new CBLSWorker(); quorumDKGDebugManager = new CDKGDebugManager(scheduler); quorumBlockProcessor = new CQuorumBlockProcessor(evoDb); - quorumDKGSessionManager = new CDKGSessionManager(*llmqDb, blsWorker); - quorumManager = new CQuorumManager(evoDb, blsWorker, *quorumDKGSessionManager); + quorumDKGSessionManager = new CDKGSessionManager(*llmqDb, *blsWorker); + quorumManager = new CQuorumManager(evoDb, *blsWorker, *quorumDKGSessionManager); quorumSigSharesManager = new CSigSharesManager(); quorumSigningManager = new CSigningManager(*llmqDb, unitTests); chainLocksHandler = new CChainLocksHandler(scheduler); @@ -56,12 +57,17 @@ void DestroyLLMQSystem() quorumBlockProcessor = nullptr; delete quorumDKGDebugManager; quorumDKGDebugManager = nullptr; + delete blsWorker; + blsWorker = nullptr; delete llmqDb; llmqDb = nullptr; } void StartLLMQSystem() { + if (blsWorker) { + blsWorker->Start(); + } if (quorumDKGDebugManager) { quorumDKGDebugManager->StartScheduler(); } @@ -95,6 +101,9 @@ void StopLLMQSystem() if (quorumDKGSessionManager) { quorumDKGSessionManager->StopMessageHandlerPool(); } + if (blsWorker) { + blsWorker->Stop(); + } } void InterruptLLMQSystem()