Browse Source

[wallet] Make CWallet::FundTransaction atomic

0.16
João Barbosa 7 years ago
parent
commit
03a5dc9c3c
  1. 5
      src/wallet/wallet.cpp

5
src/wallet/wallet.cpp

@ -2605,6 +2605,10 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
coinControl.Select(txin.prevout); coinControl.Select(txin.prevout);
} }
// Acquire the locks to prevent races to the new locked unspents between the
// CreateTransaction call and LockCoin calls (when lockUnspents is true).
LOCK2(cs_main, cs_wallet);
CReserveKey reservekey(this); CReserveKey reservekey(this);
CWalletTx wtx; CWalletTx wtx;
if (!CreateTransaction(vecSend, wtx, reservekey, nFeeRet, nChangePosInOut, strFailReason, coinControl, false)) { if (!CreateTransaction(vecSend, wtx, reservekey, nFeeRet, nChangePosInOut, strFailReason, coinControl, false)) {
@ -2630,7 +2634,6 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
tx.vin.push_back(txin); tx.vin.push_back(txin);
if (lockUnspents) { if (lockUnspents) {
LOCK2(cs_main, cs_wallet);
LockCoin(txin.prevout); LockCoin(txin.prevout);
} }
} }

Loading…
Cancel
Save