aboutsummaryrefslogtreecommitdiff
path: root/src/rpc.cpp
diff options
context:
space:
mode:
authorStéphane Gimenez <dev@gim.name>2011-06-27 23:22:30 +0200
committerStéphane Gimenez <dev@gim.name>2011-06-27 23:22:30 +0200
commit4d410cfce967a42cca7db13288b72baec29423d1 (patch)
treecf81efbed4c5a9d8bc2ee56e752887befdd0760a /src/rpc.cpp
parentd0d80170a2ca73004e08fb85007fe055cbf4e411 (diff)
downloadbitcoin-4d410cfce967a42cca7db13288b72baec29423d1.tar.xz
Fix AddressBook syncrhonization between a CWallet and CWalletDB
This problem was reported independently by laanwj in Issue #350.
Diffstat (limited to 'src/rpc.cpp')
-rw-r--r--src/rpc.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/rpc.cpp b/src/rpc.cpp
index dabd99d075..f2a0db0fc4 100644
--- a/src/rpc.cpp
+++ b/src/rpc.cpp
@@ -332,12 +332,15 @@ Value getnewaddress(const Array& params, bool fHelp)
// Generate a new key that is added to wallet
string strAddress = PubKeyToAddress(pwalletMain->GetKeyFromKeyPool());
- pwalletMain->SetAddressBookName(strAddress, strAccount);
+ // This could be done in the same main CS as GetKeyFromKeyPool.
+ CRITICAL_BLOCK(pwalletMain->cs_mapAddressBook)
+ pwalletMain->SetAddressBookName(strAddress, strAccount);
+
return strAddress;
}
-// requires cs_main, cs_mapWallet locks
+// requires cs_main, cs_mapWallet, cs_mapAddressBook locks
string GetAccountAddress(string strAccount, bool bForceNew=false)
{
string strAddress;
@@ -393,6 +396,7 @@ Value getaccountaddress(const Array& params, bool fHelp)
CRITICAL_BLOCK(cs_main)
CRITICAL_BLOCK(pwalletMain->cs_mapWallet)
+ CRITICAL_BLOCK(pwalletMain->cs_mapAddressBook)
{
ret = GetAccountAddress(strAccount);
}
@@ -431,9 +435,10 @@ Value setaccount(const Array& params, bool fHelp)
if (strAddress == GetAccountAddress(strOldAccount))
GetAccountAddress(strOldAccount, true);
}
+
+ pwalletMain->SetAddressBookName(strAddress, strAccount);
}
- pwalletMain->SetAddressBookName(strAddress, strAccount);
return Value::null;
}