aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2012-02-11 16:35:40 +0100
committerLuke Dashjr <luke-jr+git@utopios.org>2012-02-17 09:38:20 -0500
commit8960f2fc3353d5d7f8b9babd1aaef0e9869e39f4 (patch)
tree0501faefcd2fed0f01fa565fc33520d73255d131
parent43163a5a4d0fd3c849dbb2e7070b7ba4f7a70d27 (diff)
downloadbitcoin-8960f2fc3353d5d7f8b9babd1aaef0e9869e39f4.tar.xz
Fix wallet locking locking
-rw-r--r--src/rpc.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/rpc.cpp b/src/rpc.cpp
index 33108948d3..5326cdc2b7 100644
--- a/src/rpc.cpp
+++ b/src/rpc.cpp
@@ -1279,33 +1279,31 @@ void ThreadCleanWalletPassphrase(void* parg)
{
int64 nMyWakeTime = GetTime() + *((int*)parg);
+ ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime);
+
if (nWalletUnlockTime == 0)
{
- CRITICAL_BLOCK(cs_nWalletUnlockTime)
- {
- nWalletUnlockTime = nMyWakeTime;
- }
+ nWalletUnlockTime = nMyWakeTime;
while (GetTime() < nWalletUnlockTime)
- Sleep(GetTime() - nWalletUnlockTime);
-
- CRITICAL_BLOCK(cs_nWalletUnlockTime)
{
- nWalletUnlockTime = 0;
+ int64 nToSleep = GetTime() - nWalletUnlockTime;
+
+ LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime);
+ Sleep(nToSleep);
+ ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime);
}
+
+ nWalletUnlockTime = 0;
+ pwalletMain->Lock();
}
else
{
- CRITICAL_BLOCK(cs_nWalletUnlockTime)
- {
- if (nWalletUnlockTime < nMyWakeTime)
- nWalletUnlockTime = nMyWakeTime;
- }
- delete (int*)parg;
- return;
+ if (nWalletUnlockTime < nMyWakeTime)
+ nWalletUnlockTime = nMyWakeTime;
}
- pwalletMain->Lock();
+ LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime);
delete (int*)parg;
}