aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2012-11-16 08:09:41 -0800
committerGavin Andresen <gavinandresen@gmail.com>2012-11-16 08:09:41 -0800
commite45d39f9ee9ef776a32d398d973351e7c94f3f38 (patch)
tree78bf4b8ec7045bce354f4f1c01ee60a641ad9bc5 /src
parent1fefd2a5bc8eb3a95c12e260f554c6dcfbb1773c (diff)
parent4291e8feab308cb9c7840d74fc7aacf137a7c21f (diff)
downloadbitcoin-e45d39f9ee9ef776a32d398d973351e7c94f3f38.tar.xz
Merge pull request #2009 from sipa/fixmove
Prevent RPC 'move' from deadlocking
Diffstat (limited to 'src')
-rw-r--r--src/rpcwallet.cpp4
-rw-r--r--src/wallet.cpp10
-rw-r--r--src/wallet.h2
3 files changed, 10 insertions, 6 deletions
diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp
index 29b3298b99..5ebab755b7 100644
--- a/src/rpcwallet.cpp
+++ b/src/rpcwallet.cpp
@@ -573,7 +573,7 @@ Value movecmd(const Array& params, bool fHelp)
// Debit
CAccountingEntry debit;
- debit.nOrderPos = pwalletMain->IncOrderPosNext();
+ debit.nOrderPos = pwalletMain->IncOrderPosNext(&walletdb);
debit.strAccount = strFrom;
debit.nCreditDebit = -nAmount;
debit.nTime = nNow;
@@ -583,7 +583,7 @@ Value movecmd(const Array& params, bool fHelp)
// Credit
CAccountingEntry credit;
- credit.nOrderPos = pwalletMain->IncOrderPosNext();
+ credit.nOrderPos = pwalletMain->IncOrderPosNext(&walletdb);
credit.strAccount = strTo;
credit.nCreditDebit = nAmount;
credit.nTime = nNow;
diff --git a/src/wallet.cpp b/src/wallet.cpp
index 0115e56b8e..3bfb24832b 100644
--- a/src/wallet.cpp
+++ b/src/wallet.cpp
@@ -291,10 +291,14 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
return true;
}
-int64 CWallet::IncOrderPosNext()
+int64 CWallet::IncOrderPosNext(CWalletDB *pwalletdb)
{
- int64 nRet = nOrderPosNext;
- CWalletDB(strWalletFile).WriteOrderPosNext(++nOrderPosNext);
+ int64 nRet = nOrderPosNext++;
+ if (pwalletdb) {
+ pwalletdb->WriteOrderPosNext(nOrderPosNext);
+ } else {
+ CWalletDB(strWalletFile).WriteOrderPosNext(nOrderPosNext);
+ }
return nRet;
}
diff --git a/src/wallet.h b/src/wallet.h
index 5e2f8e0ba1..05d60056f4 100644
--- a/src/wallet.h
+++ b/src/wallet.h
@@ -149,7 +149,7 @@ public:
/** Increment the next transaction order id
@return next transaction order id
*/
- int64 IncOrderPosNext();
+ int64 IncOrderPosNext(CWalletDB *pwalletdb = NULL);
typedef std::pair<CWalletTx*, CAccountingEntry*> TxPair;
typedef std::multimap<int64, TxPair > TxItems;