aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rpc.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/rpc.cpp b/src/rpc.cpp
index 3a573043f7..5965fef433 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<string, rpcfn_type> 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;