Merge pull request #926 from gmaxwell/master

Resolves issue #922 - "wallet passphrase timeout of several years doesn't work"
This commit is contained in:
Pieter Wuille 2012-03-11 18:41:00 -07:00
commit 336ba312a6
2 changed files with 6 additions and 4 deletions

View file

@ -1548,7 +1548,7 @@ void ThreadTopUpKeyPool(void* parg)
void ThreadCleanWalletPassphrase(void* parg) void ThreadCleanWalletPassphrase(void* parg)
{ {
int64 nMyWakeTime = GetTimeMillis() + *((int*)parg) * 1000; int64 nMyWakeTime = GetTimeMillis() + *((int64*)parg) * 1000;
ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime); ENTER_CRITICAL_SECTION(cs_nWalletUnlockTime);
@ -1584,7 +1584,7 @@ void ThreadCleanWalletPassphrase(void* parg)
LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime); LEAVE_CRITICAL_SECTION(cs_nWalletUnlockTime);
delete (int*)parg; delete (int64*)parg;
} }
Value walletpassphrase(const Array& params, bool fHelp) Value walletpassphrase(const Array& params, bool fHelp)
@ -1619,7 +1619,7 @@ Value walletpassphrase(const Array& params, bool fHelp)
"Stores the wallet decryption key in memory for <timeout> seconds."); "Stores the wallet decryption key in memory for <timeout> seconds.");
CreateThread(ThreadTopUpKeyPool, NULL); CreateThread(ThreadTopUpKeyPool, NULL);
int* pnSleepTime = new int(params[1].get_int()); int64* pnSleepTime = new int64(params[1].get_int64());
CreateThread(ThreadCleanWalletPassphrase, pnSleepTime); CreateThread(ThreadCleanWalletPassphrase, pnSleepTime);
return Value::null; return Value::null;

View file

@ -88,7 +88,9 @@ T* alignup(T* p)
#define Beep(n1,n2) (0) #define Beep(n1,n2) (0)
inline void Sleep(int64 n) inline void Sleep(int64 n)
{ {
boost::thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(n)); /*Boost has a year 2038 problem— if the request sleep time is past epoch+2^31 seconds the sleep returns instantly.
So we clamp our sleeps here to 10 years and hope that boost is fixed by 2028.*/
boost::thread::sleep(boost::get_system_time() + boost::posix_time::milliseconds(n>315576000000LL?315576000000LL:n));
} }
#endif #endif