From 36cb150b33247da214a698d6ed212dcfcf9291b8 Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Mon, 25 Mar 2019 15:12:58 +0300 Subject: [PATCH 1/2] Fix potential deadlock in LoadWallet() ``` POTENTIAL DEADLOCK DETECTED Previous lock order was: (1) cs_main wallet/wallet.cpp:3881 (2) cs_wallet wallet/wallet.cpp:3881 Current lock order is: (2) pwallet->cs_wallet wallet/walletdb.cpp:589 (1) cs_main wallet/wallet.cpp:1252 ``` --- src/wallet/walletdb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp index 3714a51f7748d..645c8b21e6413 100644 --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -586,7 +586,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) bool fNoncriticalErrors = false; DBErrors result = DB_LOAD_OK; - LOCK(pwallet->cs_wallet); + LOCK2(cs_main, pwallet->cs_wallet); try { int nMinVersion = 0; if (Read((std::string)"minversion", nMinVersion)) From 665ad79596fa4e4b5ad656e023af8a7e2740121f Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Mon, 25 Mar 2019 15:46:51 +0300 Subject: [PATCH 2/2] Add comment in CWallet::MarkConflicted re new cs_main lock in CWalletDB::LoadWallet() --- src/wallet/wallet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index b668a60f1f5c9..057a86add841d 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1249,7 +1249,7 @@ bool CWallet::AbandonTransaction(const uint256& hashTx) void CWallet::MarkConflicted(const uint256& hashBlock, const uint256& hashTx) { - LOCK2(cs_main, cs_wallet); + LOCK2(cs_main, cs_wallet); // check "LOCK2(cs_main, pwallet->cs_wallet);" in CWalletDB::LoadWallet() int conflictconfirms = 0; if (mapBlockIndex.count(hashBlock)) {