mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 19:42:46 +01:00
Merge #5737: backport: Merge bitcoin#18452, 19111, 19104
96ac317c27
Merge #19104: gui, refactor: Register Qt meta types in application constructor (Jonas Schnelli)32f717c015
Merge #19111: Limit scope of all global std::once_flag (MarcoFalke)7a6667f323
Merge #18452: qt: Fix shutdown when waitfor* cmds are called from RPC console (Jonas Schnelli) Pull request description: ## Issue being fixed or feature implemented ## What was done? ## How Has This Been Tested? CI passing ## Breaking Changes None ## Checklist: _Go over all the following points, and put an `x` in all the boxes that apply._ - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ Top commit has no ACKs. Tree-SHA512: a1a9d18674b7c55549edd684211bb9de983a67876ed292d90ef3dccb126122af9b5d8c887608bbce74b7fa92c020a542d2ea1acdc693d85eba889aa8c56ac8df
This commit is contained in:
commit
37f43e4e56
@ -254,7 +254,15 @@ public:
|
||||
StartRestart();
|
||||
PrepareShutdown(*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, bool use_natpmp) override { StartMapPort(use_upnp, use_natpmp); }
|
||||
bool getProxy(Network net, proxyType& proxy_info) override { return GetProxy(net, proxy_info); }
|
||||
|
@ -74,6 +74,24 @@ Q_DECLARE_METATYPE(CAmount)
|
||||
Q_DECLARE_METATYPE(SynchronizationState)
|
||||
Q_DECLARE_METATYPE(uint256)
|
||||
|
||||
static void RegisterMetaTypes()
|
||||
{
|
||||
// Register meta types used for QMetaObject::invokeMethod and Qt::QueuedConnection
|
||||
qRegisterMetaType<bool*>();
|
||||
qRegisterMetaType<SynchronizationState>();
|
||||
#ifdef ENABLE_WALLET
|
||||
qRegisterMetaType<WalletModel*>();
|
||||
#endif
|
||||
// Register typedefs (see http://qt-project.org/doc/qt-5/qmetatype.html#qRegisterMetaType)
|
||||
// IMPORTANT: if CAmount is no longer a typedef use the normal variant above (see https://doc.qt.io/qt-5/qmetatype.html#qRegisterMetaType-1)
|
||||
qRegisterMetaType<CAmount>("CAmount");
|
||||
qRegisterMetaType<size_t>("size_t");
|
||||
|
||||
qRegisterMetaType<std::function<void()>>("std::function<void()>");
|
||||
qRegisterMetaType<QMessageBox::Icon>("QMessageBox::Icon");
|
||||
qRegisterMetaType<interfaces::BlockAndHeaderTipInfo>("interfaces::BlockAndHeaderTipInfo");
|
||||
}
|
||||
|
||||
static QString GetLangTerritory()
|
||||
{
|
||||
QSettings settings;
|
||||
@ -262,6 +280,7 @@ BitcoinApplication::BitcoinApplication():
|
||||
pollShutdownTimer(nullptr),
|
||||
returnValue(0)
|
||||
{
|
||||
RegisterMetaTypes();
|
||||
// Qt runs setlocale(LC_ALL, "") on initialization.
|
||||
setQuitOnLastWindowClosed(false);
|
||||
}
|
||||
@ -543,21 +562,6 @@ int GuiMain(int argc, char* argv[])
|
||||
|
||||
BitcoinApplication app;
|
||||
|
||||
// Register meta types used for QMetaObject::invokeMethod and Qt::QueuedConnection
|
||||
qRegisterMetaType<bool*>();
|
||||
qRegisterMetaType<SynchronizationState>();
|
||||
#ifdef ENABLE_WALLET
|
||||
qRegisterMetaType<WalletModel*>();
|
||||
#endif
|
||||
// Register typedefs (see http://qt-project.org/doc/qt-5/qmetatype.html#qRegisterMetaType)
|
||||
// IMPORTANT: if CAmount is no longer a typedef use the normal variant above (see https://doc.qt.io/qt-5/qmetatype.html#qRegisterMetaType-1)
|
||||
qRegisterMetaType<CAmount>("CAmount");
|
||||
qRegisterMetaType<size_t>("size_t");
|
||||
|
||||
qRegisterMetaType<std::function<void()>>("std::function<void()>");
|
||||
qRegisterMetaType<QMessageBox::Icon>("QMessageBox::Icon");
|
||||
qRegisterMetaType<interfaces::BlockAndHeaderTipInfo>("interfaces::BlockAndHeaderTipInfo");
|
||||
|
||||
/// 2. Parse command-line options. We do this after qt in order to show an error if there are problems parsing these
|
||||
// Command-line options take precedence:
|
||||
SetupServerArgs(node_context);
|
||||
|
@ -18,7 +18,9 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
#include <cassert>
|
||||
#include <memory> // for unique_ptr
|
||||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
|
||||
static Mutex g_rpc_warmup_mutex;
|
||||
@ -325,17 +327,26 @@ void StartRPC()
|
||||
|
||||
void InterruptRPC()
|
||||
{
|
||||
LogPrint(BCLog::RPC, "Interrupting RPC\n");
|
||||
// Interrupt e.g. running longpolls
|
||||
g_rpc_running = false;
|
||||
static std::once_flag g_rpc_interrupt_flag;
|
||||
// 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();
|
||||
static std::once_flag g_rpc_stop_flag;
|
||||
// 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()
|
||||
|
@ -29,7 +29,6 @@
|
||||
#endif
|
||||
|
||||
LockedPoolManager* LockedPoolManager::_instance = nullptr;
|
||||
std::once_flag LockedPoolManager::init_flag;
|
||||
|
||||
/*******************************************************************************/
|
||||
// Utilities
|
||||
|
@ -221,7 +221,8 @@ public:
|
||||
/** Return the current instance, or create it once */
|
||||
static LockedPoolManager& Instance()
|
||||
{
|
||||
std::call_once(LockedPoolManager::init_flag, LockedPoolManager::CreateInstance);
|
||||
static std::once_flag init_flag;
|
||||
std::call_once(init_flag, LockedPoolManager::CreateInstance);
|
||||
return *LockedPoolManager::_instance;
|
||||
}
|
||||
|
||||
@ -234,7 +235,6 @@ private:
|
||||
static bool LockingFailed();
|
||||
|
||||
static LockedPoolManager* _instance;
|
||||
static std::once_flag init_flag;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_SUPPORT_LOCKEDPOOL_H
|
||||
|
Loading…
Reference in New Issue
Block a user