mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-05 17:30:59 +02:00
qt: Fix shutdown when waitfor* cmds are called from RPC console
This commit is contained in:
parent
a33901cb6d
commit
da73f1513a
@ -87,7 +87,15 @@ public:
|
||||
Interrupt(m_context);
|
||||
Shutdown(m_context);
|
||||
}
|
||||
void startShutdown() override { StartShutdown(); }
|
||||
void startShutdown() override
|
||||
{
|
||||
StartShutdown();
|
||||
// Stop RPC for clean shutdown if any of waitfor* commands is executed.
|
||||
if (gArgs.GetBoolArg("-server", false)) {
|
||||
InterruptRPC();
|
||||
StopRPC();
|
||||
}
|
||||
}
|
||||
bool shutdownRequested() override { return ShutdownRequested(); }
|
||||
void mapPort(bool use_upnp) override
|
||||
{
|
||||
|
@ -15,11 +15,15 @@
|
||||
#include <boost/algorithm/string/classification.hpp>
|
||||
#include <boost/algorithm/string/split.hpp>
|
||||
|
||||
#include <cassert>
|
||||
#include <memory> // for unique_ptr
|
||||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
|
||||
static RecursiveMutex cs_rpcWarmup;
|
||||
static std::atomic<bool> g_rpc_running{false};
|
||||
static std::once_flag g_rpc_interrupt_flag;
|
||||
static std::once_flag g_rpc_stop_flag;
|
||||
static bool fRPCInWarmup GUARDED_BY(cs_rpcWarmup) = true;
|
||||
static std::string rpcWarmupStatus GUARDED_BY(cs_rpcWarmup) = "RPC server started";
|
||||
/* Timer-creating functions */
|
||||
@ -291,17 +295,24 @@ void StartRPC()
|
||||
|
||||
void InterruptRPC()
|
||||
{
|
||||
LogPrint(BCLog::RPC, "Interrupting RPC\n");
|
||||
// Interrupt e.g. running longpolls
|
||||
g_rpc_running = false;
|
||||
// This function could be called twice if the GUI has been started with -server=1.
|
||||
std::call_once(g_rpc_interrupt_flag, []() {
|
||||
LogPrint(BCLog::RPC, "Interrupting RPC\n");
|
||||
// Interrupt e.g. running longpolls
|
||||
g_rpc_running = false;
|
||||
});
|
||||
}
|
||||
|
||||
void StopRPC()
|
||||
{
|
||||
LogPrint(BCLog::RPC, "Stopping RPC\n");
|
||||
WITH_LOCK(g_deadline_timers_mutex, deadlineTimers.clear());
|
||||
DeleteAuthCookie();
|
||||
g_rpcSignals.Stopped();
|
||||
// This function could be called twice if the GUI has been started with -server=1.
|
||||
assert(!g_rpc_running);
|
||||
std::call_once(g_rpc_stop_flag, []() {
|
||||
LogPrint(BCLog::RPC, "Stopping RPC\n");
|
||||
WITH_LOCK(g_deadline_timers_mutex, deadlineTimers.clear());
|
||||
DeleteAuthCookie();
|
||||
g_rpcSignals.Stopped();
|
||||
});
|
||||
}
|
||||
|
||||
bool IsRPCRunning()
|
||||
|
Loading…
x
Reference in New Issue
Block a user