|
|
@ -2546,13 +2546,6 @@ static UniValue keypoolrefill(const JSONRPCRequest& request)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void LockWallet(CWallet* pWallet)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
LOCK(pWallet->cs_wallet);
|
|
|
|
|
|
|
|
pWallet->nRelockTime = 0;
|
|
|
|
|
|
|
|
pWallet->Lock();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static UniValue walletpassphrase(const JSONRPCRequest& request)
|
|
|
|
static UniValue walletpassphrase(const JSONRPCRequest& request)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request);
|
|
|
|
std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request);
|
|
|
@ -2622,7 +2615,18 @@ static UniValue walletpassphrase(const JSONRPCRequest& request)
|
|
|
|
pwallet->TopUpKeyPool();
|
|
|
|
pwallet->TopUpKeyPool();
|
|
|
|
|
|
|
|
|
|
|
|
pwallet->nRelockTime = GetTime() + nSleepTime;
|
|
|
|
pwallet->nRelockTime = GetTime() + nSleepTime;
|
|
|
|
RPCRunLater(strprintf("lockwallet(%s)", pwallet->GetName()), std::bind(LockWallet, pwallet), nSleepTime);
|
|
|
|
|
|
|
|
|
|
|
|
// Keep a weak pointer to the wallet so that it is possible to unload the
|
|
|
|
|
|
|
|
// wallet before the following callback is called. If a valid shared pointer
|
|
|
|
|
|
|
|
// is acquired in the callback then the wallet is still loaded.
|
|
|
|
|
|
|
|
std::weak_ptr<CWallet> weak_wallet = wallet;
|
|
|
|
|
|
|
|
RPCRunLater(strprintf("lockwallet(%s)", pwallet->GetName()), [weak_wallet] {
|
|
|
|
|
|
|
|
if (auto shared_wallet = weak_wallet.lock()) {
|
|
|
|
|
|
|
|
LOCK(shared_wallet->cs_wallet);
|
|
|
|
|
|
|
|
shared_wallet->Lock();
|
|
|
|
|
|
|
|
shared_wallet->nRelockTime = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, nSleepTime);
|
|
|
|
|
|
|
|
|
|
|
|
return NullUniValue;
|
|
|
|
return NullUniValue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|