Fix wallet locking locking

This commit is contained in:
Pieter Wuille 2012-02-11 16:35:40 +01:00
parent 88bc5f9485
commit b0529ffd95
1 changed files with 14 additions and 16 deletions

View File

@ -1539,33 +1539,31 @@ void ThreadCleanWalletPassphrase(void* parg)
{ {
int64 nMyWakeTime = GetTime() + *((int*)parg); int64 nMyWakeTime = GetTime() + *((int*)parg);
ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime);
if (nWalletUnlockTime == 0) if (nWalletUnlockTime == 0)
{ {
CRITICAL_BLOCK(cs_nWalletUnlockTime) nWalletUnlockTime = nMyWakeTime;
{
nWalletUnlockTime = nMyWakeTime;
}
while (GetTime() < nWalletUnlockTime) 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 else
{ {
CRITICAL_BLOCK(cs_nWalletUnlockTime) if (nWalletUnlockTime < nMyWakeTime)
{ nWalletUnlockTime = nMyWakeTime;
if (nWalletUnlockTime < nMyWakeTime)
nWalletUnlockTime = nMyWakeTime;
}
delete (int*)parg;
return;
} }
pwalletMain->Lock(); LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime);
delete (int*)parg; delete (int*)parg;
} }