diff --git a/src/rpc.cpp b/src/rpc.cpp index 3a573043..5965fef4 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -36,6 +36,9 @@ void ThreadRPCServer2(void* parg); typedef Value(*rpcfn_type)(const Array& params, bool fHelp); extern map mapCallTable; +static int64 nWalletUnlockTime; +static CCriticalSection cs_nWalletUnlockTime; + Object JSONRPCError(int code, const string& message) { @@ -311,6 +314,8 @@ Value getinfo(const Array& params, bool fHelp) obj.push_back(Pair("keypoololdest", (boost::int64_t)pwalletMain->GetOldestKeyPoolTime())); obj.push_back(Pair("keypoolsize", pwalletMain->GetKeyPoolSize())); obj.push_back(Pair("paytxfee", ValueFromAmount(nTransactionFee))); + if (pwalletMain->IsCrypted()) + obj.push_back(Pair("unlocked_until", (boost::int64_t)nWalletUnlockTime)); obj.push_back(Pair("errors", GetWarnings("statusbar"))); return obj; } @@ -1360,31 +1365,29 @@ void ThreadTopUpKeyPool(void* parg) void ThreadCleanWalletPassphrase(void* parg) { - static int64 nWakeTime; int64 nMyWakeTime = GetTime() + *((int*)parg); - static CCriticalSection cs_nWakeTime; - if (nWakeTime == 0) + if (nWalletUnlockTime == 0) { - CRITICAL_BLOCK(cs_nWakeTime) + CRITICAL_BLOCK(cs_nWalletUnlockTime) { - nWakeTime = nMyWakeTime; + nWalletUnlockTime = nMyWakeTime; } - while (GetTime() < nWakeTime) - Sleep(GetTime() - nWakeTime); + while (GetTime() < nWalletUnlockTime) + Sleep(GetTime() - nWalletUnlockTime); - CRITICAL_BLOCK(cs_nWakeTime) + CRITICAL_BLOCK(cs_nWalletUnlockTime) { - nWakeTime = 0; + nWalletUnlockTime = 0; } } else { - CRITICAL_BLOCK(cs_nWakeTime) + CRITICAL_BLOCK(cs_nWalletUnlockTime) { - if (nWakeTime < nMyWakeTime) - nWakeTime = nMyWakeTime; + if (nWalletUnlockTime < nMyWakeTime) + nWalletUnlockTime = nMyWakeTime; } free(parg); return;