diff options
| author | Gavin Andresen <[email protected]> | 2012-11-16 08:09:41 -0800 |
|---|---|---|
| committer | Gavin Andresen <[email protected]> | 2012-11-16 08:09:41 -0800 |
| commit | e45d39f9ee9ef776a32d398d973351e7c94f3f38 (patch) | |
| tree | 78bf4b8ec7045bce354f4f1c01ee60a641ad9bc5 /src | |
| parent | Merge pull request #2018 from Diapolo/fix_warning (diff) | |
| parent | Prevent RPC 'move' from deadlocking (diff) | |
| download | discoin-e45d39f9ee9ef776a32d398d973351e7c94f3f38.tar.xz discoin-e45d39f9ee9ef776a32d398d973351e7c94f3f38.zip | |
Merge pull request #2009 from sipa/fixmove
Prevent RPC 'move' from deadlocking
Diffstat (limited to 'src')
| -rw-r--r-- | src/rpcwallet.cpp | 4 | ||||
| -rw-r--r-- | src/wallet.cpp | 10 | ||||
| -rw-r--r-- | src/wallet.h | 2 |
3 files changed, 10 insertions, 6 deletions
diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp index 29b3298b9..5ebab755b 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 0115e56b8..3bfb24832 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 5e2f8e0ba..05d60056f 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; |