Prevent RPC 'move' from deadlocking
It seemed to create two CWalletDB objects that both grab the database lock.
This commit is contained in:
parent
eb49457ff2
commit
4291e8feab
3 changed files with 10 additions and 6 deletions
|
@ -573,7 +573,7 @@ Value movecmd(const Array& params, bool fHelp)
|
||||||
|
|
||||||
// Debit
|
// Debit
|
||||||
CAccountingEntry debit;
|
CAccountingEntry debit;
|
||||||
debit.nOrderPos = pwalletMain->IncOrderPosNext();
|
debit.nOrderPos = pwalletMain->IncOrderPosNext(&walletdb);
|
||||||
debit.strAccount = strFrom;
|
debit.strAccount = strFrom;
|
||||||
debit.nCreditDebit = -nAmount;
|
debit.nCreditDebit = -nAmount;
|
||||||
debit.nTime = nNow;
|
debit.nTime = nNow;
|
||||||
|
@ -583,7 +583,7 @@ Value movecmd(const Array& params, bool fHelp)
|
||||||
|
|
||||||
// Credit
|
// Credit
|
||||||
CAccountingEntry credit;
|
CAccountingEntry credit;
|
||||||
credit.nOrderPos = pwalletMain->IncOrderPosNext();
|
credit.nOrderPos = pwalletMain->IncOrderPosNext(&walletdb);
|
||||||
credit.strAccount = strTo;
|
credit.strAccount = strTo;
|
||||||
credit.nCreditDebit = nAmount;
|
credit.nCreditDebit = nAmount;
|
||||||
credit.nTime = nNow;
|
credit.nTime = nNow;
|
||||||
|
|
|
@ -291,10 +291,14 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64 CWallet::IncOrderPosNext()
|
int64 CWallet::IncOrderPosNext(CWalletDB *pwalletdb)
|
||||||
{
|
{
|
||||||
int64 nRet = nOrderPosNext;
|
int64 nRet = nOrderPosNext++;
|
||||||
CWalletDB(strWalletFile).WriteOrderPosNext(++nOrderPosNext);
|
if (pwalletdb) {
|
||||||
|
pwalletdb->WriteOrderPosNext(nOrderPosNext);
|
||||||
|
} else {
|
||||||
|
CWalletDB(strWalletFile).WriteOrderPosNext(nOrderPosNext);
|
||||||
|
}
|
||||||
return nRet;
|
return nRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ public:
|
||||||
/** Increment the next transaction order id
|
/** Increment the next transaction order id
|
||||||
@return next transaction order id
|
@return next transaction order id
|
||||||
*/
|
*/
|
||||||
int64 IncOrderPosNext();
|
int64 IncOrderPosNext(CWalletDB *pwalletdb = NULL);
|
||||||
|
|
||||||
typedef std::pair<CWalletTx*, CAccountingEntry*> TxPair;
|
typedef std::pair<CWalletTx*, CAccountingEntry*> TxPair;
|
||||||
typedef std::multimap<int64, TxPair > TxItems;
|
typedef std::multimap<int64, TxPair > TxItems;
|
||||||
|
|
Loading…
Reference in a new issue