@@ -176,6 +176,7 @@ CSigSharesInv CBatchedSigShares::ToInv() const
176176
177177CSigSharesManager::CSigSharesManager ()
178178{
179+ StartWorkerThread ();
179180}
180181
181182CSigSharesManager::~CSigSharesManager ()
@@ -185,24 +186,23 @@ CSigSharesManager::~CSigSharesManager()
185186
186187void CSigSharesManager::StartWorkerThread ()
187188{
188- workThread = std::thread ([this ]() {
189- RenameThread (" quorum-sigshares" );
190- WorkThreadMain ();
191- });
189+ workThread = std::thread (&TraceThread<std::function<void ()> >,
190+ " sigshares" ,
191+ std::function<void ()>(std::bind (&CSigSharesManager::WorkThreadMain, this )));
192192}
193193
194194void CSigSharesManager::StopWorkerThread ()
195195{
196- if (stopWorkThread) {
197- return ;
198- }
199-
200- stopWorkThread = true ;
201196 if (workThread.joinable ()) {
202197 workThread.join ();
203198 }
204199}
205200
201+ void CSigSharesManager::InterruptWorkerThread ()
202+ {
203+ workInterrupt ();
204+ }
205+
206206void CSigSharesManager::ProcessMessage (CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, CConnman& connman)
207207{
208208 // non-masternodes are not interested in sigshares
@@ -1096,8 +1096,16 @@ void CSigSharesManager::BanNode(NodeId nodeId)
10961096
10971097void CSigSharesManager::WorkThreadMain ()
10981098{
1099- int64_t lastProcessTime = GetTimeMillis ();
1100- while (!stopWorkThread && !ShutdownRequested ()) {
1099+ workInterrupt.reset ();
1100+
1101+ while (!workInterrupt) {
1102+ if (!quorumSigningManager || !g_connman || !quorumSigningManager) {
1103+ if (!workInterrupt.sleep_for (std::chrono::milliseconds (100 ))) {
1104+ return ;
1105+ }
1106+ continue ;
1107+ }
1108+
11011109 RemoveBannedNodeStates ();
11021110 quorumSigningManager->ProcessPendingRecoveredSigs (*g_connman);
11031111 ProcessPendingSigShares (*g_connman);
@@ -1107,7 +1115,9 @@ void CSigSharesManager::WorkThreadMain()
11071115 quorumSigningManager->Cleanup ();
11081116
11091117 // TODO Wakeup when pending signing is needed?
1110- MilliSleep (100 );
1118+ if (!workInterrupt.sleep_for (std::chrono::milliseconds (100 ))) {
1119+ return ;
1120+ }
11111121 }
11121122}
11131123
0 commit comments