@@ -53,7 +53,8 @@ class PendingWalletTxImpl : public PendingWalletTx
5353 WalletOrderForm order_form,
5454 std::string& reject_reason) override
5555 {
56- LOCK2 (cs_main, m_wallet.cs_wallet );
56+ auto locked_chain = m_wallet.chain ().lock ();
57+ LOCK (m_wallet.cs_wallet );
5758 CValidationState state;
5859 if (!m_wallet.CommitTransaction (m_tx, std::move (value_map), std::move (order_form), m_key, g_connman.get (), state)) {
5960 reject_reason = state.GetRejectReason ();
@@ -209,22 +210,26 @@ class WalletImpl : public Wallet
209210 }
210211 void lockCoin (const COutPoint& output) override
211212 {
212- LOCK2 (cs_main, m_wallet.cs_wallet );
213+ auto locked_chain = m_wallet.chain ().lock ();
214+ LOCK (m_wallet.cs_wallet );
213215 return m_wallet.LockCoin (output);
214216 }
215217 void unlockCoin (const COutPoint& output) override
216218 {
217- LOCK2 (cs_main, m_wallet.cs_wallet );
219+ auto locked_chain = m_wallet.chain ().lock ();
220+ LOCK (m_wallet.cs_wallet );
218221 return m_wallet.UnlockCoin (output);
219222 }
220223 bool isLockedCoin (const COutPoint& output) override
221224 {
222- LOCK2 (cs_main, m_wallet.cs_wallet );
225+ auto locked_chain = m_wallet.chain ().lock ();
226+ LOCK (m_wallet.cs_wallet );
223227 return m_wallet.IsLockedCoin (output.hash , output.n );
224228 }
225229 void listLockedCoins (std::vector<COutPoint>& outputs) override
226230 {
227- LOCK2 (cs_main, m_wallet.cs_wallet );
231+ auto locked_chain = m_wallet.chain ().lock ();
232+ LOCK (m_wallet.cs_wallet );
228233 return m_wallet.ListLockedCoins (outputs);
229234 }
230235 std::unique_ptr<PendingWalletTx> createTransaction (const std::vector<CRecipient>& recipients,
@@ -234,7 +239,8 @@ class WalletImpl : public Wallet
234239 CAmount& fee,
235240 std::string& fail_reason) override
236241 {
237- LOCK2 (cs_main, m_wallet.cs_wallet );
242+ auto locked_chain = m_wallet.chain ().lock ();
243+ LOCK (m_wallet.cs_wallet );
238244 auto pending = MakeUnique<PendingWalletTxImpl>(m_wallet);
239245 if (!m_wallet.CreateTransaction (recipients, pending->m_tx , pending->m_key , fee, change_pos,
240246 fail_reason, coin_control, sign)) {
@@ -245,7 +251,8 @@ class WalletImpl : public Wallet
245251 bool transactionCanBeAbandoned (const uint256& txid) override { return m_wallet.TransactionCanBeAbandoned (txid); }
246252 bool abandonTransaction (const uint256& txid) override
247253 {
248- LOCK2 (cs_main, m_wallet.cs_wallet );
254+ auto locked_chain = m_wallet.chain ().lock ();
255+ LOCK (m_wallet.cs_wallet );
249256 return m_wallet.AbandonTransaction (txid);
250257 }
251258 bool transactionCanBeBumped (const uint256& txid) override
@@ -274,7 +281,8 @@ class WalletImpl : public Wallet
274281 }
275282 CTransactionRef getTx (const uint256& txid) override
276283 {
277- LOCK2 (::cs_main, m_wallet.cs_wallet );
284+ auto locked_chain = m_wallet.chain ().lock ();
285+ LOCK (m_wallet.cs_wallet );
278286 auto mi = m_wallet.mapWallet .find (txid);
279287 if (mi != m_wallet.mapWallet .end ()) {
280288 return mi->second .tx ;
@@ -283,7 +291,8 @@ class WalletImpl : public Wallet
283291 }
284292 WalletTx getWalletTx (const uint256& txid) override
285293 {
286- LOCK2 (::cs_main, m_wallet.cs_wallet );
294+ auto locked_chain = m_wallet.chain ().lock ();
295+ LOCK (m_wallet.cs_wallet );
287296 auto mi = m_wallet.mapWallet .find (txid);
288297 if (mi != m_wallet.mapWallet .end ()) {
289298 return MakeWalletTx (m_wallet, mi->second );
@@ -292,7 +301,8 @@ class WalletImpl : public Wallet
292301 }
293302 std::vector<WalletTx> getWalletTxs () override
294303 {
295- LOCK2 (::cs_main, m_wallet.cs_wallet );
304+ auto locked_chain = m_wallet.chain ().lock ();
305+ LOCK (m_wallet.cs_wallet );
296306 std::vector<WalletTx> result;
297307 result.reserve (m_wallet.mapWallet .size ());
298308 for (const auto & entry : m_wallet.mapWallet ) {
@@ -304,7 +314,7 @@ class WalletImpl : public Wallet
304314 interfaces::WalletTxStatus& tx_status,
305315 int & num_blocks) override
306316 {
307- TRY_LOCK (::cs_main, locked_chain);
317+ auto locked_chain = m_wallet. chain (). lock ( true /* try_lock */ );
308318 if (!locked_chain) {
309319 return false ;
310320 }
@@ -326,7 +336,8 @@ class WalletImpl : public Wallet
326336 bool & in_mempool,
327337 int & num_blocks) override
328338 {
329- LOCK2 (::cs_main, m_wallet.cs_wallet );
339+ auto locked_chain = m_wallet.chain ().lock ();
340+ LOCK (m_wallet.cs_wallet );
330341 auto mi = m_wallet.mapWallet .find (txid);
331342 if (mi != m_wallet.mapWallet .end ()) {
332343 num_blocks = ::chainActive.Height ();
@@ -353,7 +364,7 @@ class WalletImpl : public Wallet
353364 }
354365 bool tryGetBalances (WalletBalances& balances, int & num_blocks) override
355366 {
356- TRY_LOCK (cs_main, locked_chain);
367+ auto locked_chain = m_wallet. chain (). lock ( true /* try_lock */ );
357368 if (!locked_chain) return false ;
358369 TRY_LOCK (m_wallet.cs_wallet , locked_wallet);
359370 if (!locked_wallet) {
@@ -370,27 +381,32 @@ class WalletImpl : public Wallet
370381 }
371382 isminetype txinIsMine (const CTxIn& txin) override
372383 {
373- LOCK2 (::cs_main, m_wallet.cs_wallet );
384+ auto locked_chain = m_wallet.chain ().lock ();
385+ LOCK (m_wallet.cs_wallet );
374386 return m_wallet.IsMine (txin);
375387 }
376388 isminetype txoutIsMine (const CTxOut& txout) override
377389 {
378- LOCK2 (::cs_main, m_wallet.cs_wallet );
390+ auto locked_chain = m_wallet.chain ().lock ();
391+ LOCK (m_wallet.cs_wallet );
379392 return m_wallet.IsMine (txout);
380393 }
381394 CAmount getDebit (const CTxIn& txin, isminefilter filter) override
382395 {
383- LOCK2 (::cs_main, m_wallet.cs_wallet );
396+ auto locked_chain = m_wallet.chain ().lock ();
397+ LOCK (m_wallet.cs_wallet );
384398 return m_wallet.GetDebit (txin, filter);
385399 }
386400 CAmount getCredit (const CTxOut& txout, isminefilter filter) override
387401 {
388- LOCK2 (::cs_main, m_wallet.cs_wallet );
402+ auto locked_chain = m_wallet.chain ().lock ();
403+ LOCK (m_wallet.cs_wallet );
389404 return m_wallet.GetCredit (txout, filter);
390405 }
391406 CoinsList listCoins () override
392407 {
393- LOCK2 (::cs_main, m_wallet.cs_wallet );
408+ auto locked_chain = m_wallet.chain ().lock ();
409+ LOCK (m_wallet.cs_wallet );
394410 CoinsList result;
395411 for (const auto & entry : m_wallet.ListCoins ()) {
396412 auto & group = result[entry.first ];
@@ -403,7 +419,8 @@ class WalletImpl : public Wallet
403419 }
404420 std::vector<WalletTxOut> getCoins (const std::vector<COutPoint>& outputs) override
405421 {
406- LOCK2 (::cs_main, m_wallet.cs_wallet );
422+ auto locked_chain = m_wallet.chain ().lock ();
423+ LOCK (m_wallet.cs_wallet );
407424 std::vector<WalletTxOut> result;
408425 result.reserve (outputs.size ());
409426 for (const auto & output : outputs) {
0 commit comments