@@ -110,6 +110,12 @@ CBLSPublicKey CQuorum::GetPubKeyShare(size_t memberIdx) const
110
110
return blsCache.BuildPubKeyShare (m->proTxHash , quorumVvec, CBLSId (m->proTxHash ));
111
111
}
112
112
113
+ bool CQuorum::HasVerificationVector () const
114
+ {
115
+ LOCK (quorumVvecCs);
116
+ return quorumVvec != nullptr ;
117
+ }
118
+
113
119
const CBLSSecretKey& CQuorum::GetSkShare () const
114
120
{
115
121
return skShare;
@@ -225,7 +231,7 @@ void CQuorumManager::TriggerQuorumDataRecoveryThreads(const CBlockIndex* pIndex)
225
231
const QvvecSyncMode syncMode = fSyncForTypeEnabled ? mapQuorumVvecSync.at (pQuorum->qc ->llmqType ) : QvvecSyncMode::Invalid;
226
232
const bool fSyncCurrent = syncMode == QvvecSyncMode::Always || (syncMode == QvvecSyncMode::OnlyIfTypeMember && fWeAreQuorumTypeMember );
227
233
228
- if ((fWeAreQuorumMember || (fSyncForTypeEnabled && fSyncCurrent )) && WITH_LOCK ( pQuorum->quorumVvecCs , return pQuorum-> quorumVvec == nullptr )) {
234
+ if ((fWeAreQuorumMember || (fSyncForTypeEnabled && fSyncCurrent )) && ! pQuorum->HasVerificationVector ( )) {
229
235
nDataMask |= llmq::CQuorumDataRequest::QUORUM_VERIFICATION_VECTOR;
230
236
}
231
237
@@ -347,6 +353,7 @@ bool CQuorumManager::BuildQuorumContributions(const CFinalCommitmentPtr& fqc, co
347
353
}
348
354
349
355
cxxtimer::Timer t2 (true );
356
+ LOCK (quorum->quorumVvecCs );
350
357
quorum->quorumVvec = blsWorker.BuildQuorumVerificationVector (vvecs);
351
358
if (quorum->quorumVvec == nullptr ) {
352
359
LogPrint (BCLog::LLMQ, " CQuorumManager::%s -- failed to build quorumVvec\n " , __func__);
@@ -604,6 +611,7 @@ void CQuorumManager::ProcessMessage(CNode* pFrom, const std::string& strCommand,
604
611
// Check if request wants QUORUM_VERIFICATION_VECTOR data
605
612
if (request.GetDataMask () & CQuorumDataRequest::QUORUM_VERIFICATION_VECTOR) {
606
613
614
+ LOCK (pQuorum->quorumVvecCs );
607
615
if (!pQuorum->quorumVvec ) {
608
616
sendQDATA (CQuorumDataRequest::Errors::QUORUM_VERIFICATION_VECTOR_MISSING);
609
617
return ;
@@ -693,7 +701,7 @@ void CQuorumManager::ProcessMessage(CNode* pFrom, const std::string& strCommand,
693
701
// Check if request has ENCRYPTED_CONTRIBUTIONS data
694
702
if (request.GetDataMask () & CQuorumDataRequest::ENCRYPTED_CONTRIBUTIONS) {
695
703
696
- if (pQuorum->quorumVvec ->size () != pQuorum->params .threshold ) {
704
+ if (WITH_LOCK ( pQuorum->quorumVvecCs , return pQuorum-> quorumVvec ->size () != pQuorum->params .threshold ) ) {
697
705
errorHandler (" No valid quorum verification vector available" , 0 ); // Don't bump score because we asked for it
698
706
return ;
699
707
}
@@ -730,7 +738,7 @@ void CQuorumManager::ProcessMessage(CNode* pFrom, const std::string& strCommand,
730
738
731
739
void CQuorumManager::StartCachePopulatorThread (const CQuorumCPtr pQuorum) const
732
740
{
733
- if (pQuorum->quorumVvec == nullptr ) {
741
+ if (! pQuorum->HasVerificationVector () ) {
734
742
return ;
735
743
}
736
744
@@ -793,8 +801,7 @@ void CQuorumManager::StartQuorumDataRecoveryThread(const CQuorumCPtr pQuorum, co
793
801
794
802
while (nDataMask > 0 && !quorumThreadInterrupt) {
795
803
796
- if (nDataMask & llmq::CQuorumDataRequest::QUORUM_VERIFICATION_VECTOR &&
797
- WITH_LOCK (pQuorum->quorumVvecCs , return pQuorum->quorumVvec != nullptr )) {
804
+ if (nDataMask & llmq::CQuorumDataRequest::QUORUM_VERIFICATION_VECTOR && pQuorum->HasVerificationVector ()) {
798
805
nDataMask &= ~llmq::CQuorumDataRequest::QUORUM_VERIFICATION_VECTOR;
799
806
printLog (" Received quorumVvec" );
800
807
}
0 commit comments