@@ -176,6 +176,7 @@ CSigSharesInv CBatchedSigShares::ToInv() const
176
176
177
177
CSigSharesManager::CSigSharesManager ()
178
178
{
179
+ StartWorkerThread ();
179
180
}
180
181
181
182
CSigSharesManager::~CSigSharesManager ()
@@ -185,24 +186,23 @@ CSigSharesManager::~CSigSharesManager()
185
186
186
187
void CSigSharesManager::StartWorkerThread ()
187
188
{
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 )));
192
192
}
193
193
194
194
void CSigSharesManager::StopWorkerThread ()
195
195
{
196
- if (stopWorkThread) {
197
- return ;
198
- }
199
-
200
- stopWorkThread = true ;
201
196
if (workThread.joinable ()) {
202
197
workThread.join ();
203
198
}
204
199
}
205
200
201
+ void CSigSharesManager::InterruptWorkerThread ()
202
+ {
203
+ workInterrupt ();
204
+ }
205
+
206
206
void CSigSharesManager::ProcessMessage (CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, CConnman& connman)
207
207
{
208
208
// non-masternodes are not interested in sigshares
@@ -1096,8 +1096,16 @@ void CSigSharesManager::BanNode(NodeId nodeId)
1096
1096
1097
1097
void CSigSharesManager::WorkThreadMain ()
1098
1098
{
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
+
1101
1109
RemoveBannedNodeStates ();
1102
1110
quorumSigningManager->ProcessPendingRecoveredSigs (*g_connman);
1103
1111
ProcessPendingSigShares (*g_connman);
@@ -1107,7 +1115,9 @@ void CSigSharesManager::WorkThreadMain()
1107
1115
quorumSigningManager->Cleanup ();
1108
1116
1109
1117
// TODO Wakeup when pending signing is needed?
1110
- MilliSleep (100 );
1118
+ if (!workInterrupt.sleep_for (std::chrono::milliseconds (100 ))) {
1119
+ return ;
1120
+ }
1111
1121
}
1112
1122
}
1113
1123
0 commit comments