Skip to content

Commit ded1b5a

Browse files
committed
fix: deadlock over cs_main and contributionsCacheCs in dkssessionmgr
It fixes rpc failure: "Work queue depth exceeded"
1 parent 2a44f2e commit ded1b5a

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/llmq/dkgsessionmgr.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,6 @@ void CDKGSessionManager::WriteEncryptedContributions(Consensus::LLMQType llmqTyp
390390

391391
bool CDKGSessionManager::GetVerifiedContributions(Consensus::LLMQType llmqType, const CBlockIndex* pQuorumBaseBlockIndex, const std::vector<bool>& validMembers, std::vector<uint16_t>& memberIndexesRet, std::vector<BLSVerificationVectorPtr>& vvecsRet, std::vector<CBLSSecretKey>& skContributionsRet) const
392392
{
393-
LOCK(contributionsCacheCs);
394393
auto members = utils::GetAllQuorumMembers(llmqType, m_dmnman, pQuorumBaseBlockIndex);
395394

396395
memberIndexesRet.clear();
@@ -399,6 +398,9 @@ bool CDKGSessionManager::GetVerifiedContributions(Consensus::LLMQType llmqType,
399398
memberIndexesRet.reserve(members.size());
400399
vvecsRet.reserve(members.size());
401400
skContributionsRet.reserve(members.size());
401+
402+
// NOTE: the `cs_main` should not be locked under scope of `contributionsCacheCs`
403+
LOCK(contributionsCacheCs);
402404
for (const auto i : irange::range(members.size())) {
403405
if (validMembers[i]) {
404406
const uint256& proTxHash = members[i]->proTxHash;

0 commit comments

Comments
 (0)