Skip to content

Commit fd50c1c

Browse files
authored
Hold cs_main/cs_wallet in main MakeCollateralAmounts (#3197)
* Hold cs_main/cs_wallet in main MakeCollateralAmounts Otherwise smth else can alter wallet state and we might end up creating conflicting txes. * AssertLockHeld
1 parent 460e0f4 commit fd50c1c

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/privatesend/privatesend-client.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1361,6 +1361,8 @@ bool CPrivateSendClientSession::MakeCollateralAmounts(CConnman& connman)
13611361
{
13621362
if (!privateSendClient.fEnablePrivateSend || !privateSendClient.fPrivateSendRunning) return false;
13631363

1364+
LOCK2(cs_main, vpwallets[0]->cs_wallet);
1365+
13641366
// NOTE: We do not allow txes larger than 100kB, so we have to limit number of inputs here.
13651367
// We still want to consume a lot of inputs to avoid creating only smaller denoms though.
13661368
// Knowing that each CTxIn is at least 148b big, 400 inputs should take 400 x ~148b = ~60kB.
@@ -1396,9 +1398,10 @@ bool CPrivateSendClientSession::MakeCollateralAmounts(CConnman& connman)
13961398
// Split up large inputs or create fee sized inputs
13971399
bool CPrivateSendClientSession::MakeCollateralAmounts(const CompactTallyItem& tallyItem, bool fTryDenominated, CConnman& connman)
13981400
{
1399-
if (!privateSendClient.fEnablePrivateSend || !privateSendClient.fPrivateSendRunning) return false;
1401+
AssertLockHeld(cs_main);
1402+
AssertLockHeld(vpwallets[0]->cs_wallet);
14001403

1401-
LOCK2(cs_main, vpwallets[0]->cs_wallet);
1404+
if (!privateSendClient.fEnablePrivateSend || !privateSendClient.fPrivateSendRunning) return false;
14021405

14031406
// denominated input is always a single one, so we can check its amount directly and return early
14041407
if (!fTryDenominated && tallyItem.vecOutPoints.size() == 1 && CPrivateSend::IsDenominatedAmount(tallyItem.nAmount)) {

0 commit comments

Comments
 (0)