mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 15:50:07 +01:00
Merge bitcoin/bitcoin#34224: init: Return EXIT_SUCCESS on interrupt
997e7b4d7cinit: Fix non-zero code on interrupt (sedited) Pull request description: Reported by dergoegge on irc. An interrupt does not create a failure exit code during normal operation. This should also be the case when interrupt is triggered during initialization. However a failure exit code is currently returned if an interrupt occurs during init. Fix this by making `AppInitMain` return true instead of false on interrupt, which further up the call stack currently sets the `EXIT_FAILURE` code. Also add a check for the interrupt condition during GUI startup. Returning `EXIT_SUCCESS` seems to be the usual behaviour for daemons, see the discussion on IRC for this: https://www.erisian.com.au/bitcoin-core-dev/log-2026-01-08.html#l-146 . Best reviewed with `--color-moved=dimmed-zebra --color-moved-ws=ignore-all-space`. ACKs for top commit: maflcko: review ACK997e7b4d7c🔺 janb84: ACK997e7b4d7cdergoegge: utACK997e7b4d7cTree-SHA512: c9542e95d9312567e029426a329144b5bc638d8ebc9c966e0246c1bb728d40f56ca425b00c446f5d238067e629c2337d0fe78bcc5a8760424d2ec38a5578e115
This commit is contained in:
@@ -1842,7 +1842,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
// requested to kill the GUI during the last operation. If so, exit.
|
||||
if (ShutdownRequested(node)) {
|
||||
LogInfo("Shutdown requested. Exiting.");
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
ChainstateManager& chainman = *Assert(node.chainman);
|
||||
@@ -2018,7 +2018,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
}
|
||||
|
||||
if (ShutdownRequested(node)) {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
// ********************************************************* Step 12: start node
|
||||
|
||||
@@ -380,53 +380,54 @@ void BitcoinApplication::initializeResult(bool success, interfaces::BlockAndHead
|
||||
{
|
||||
qDebug() << __func__ << ": Initialization result: " << success;
|
||||
|
||||
if (success) {
|
||||
delete m_splash;
|
||||
m_splash = nullptr;
|
||||
if (!success || m_node->shutdownRequested()) {
|
||||
requestShutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
// Log this only after AppInitMain finishes, as then logging setup is guaranteed complete
|
||||
qInfo() << "Platform customization:" << platformStyle->getName();
|
||||
clientModel = new ClientModel(node(), optionsModel);
|
||||
window->setClientModel(clientModel, &tip_info);
|
||||
delete m_splash;
|
||||
m_splash = nullptr;
|
||||
|
||||
// If '-min' option passed, start window minimized (iconified) or minimized to tray
|
||||
bool start_minimized = gArgs.GetBoolArg("-min", false);
|
||||
// Log this only after AppInitMain finishes, as then logging setup is guaranteed complete
|
||||
qInfo() << "Platform customization:" << platformStyle->getName();
|
||||
clientModel = new ClientModel(node(), optionsModel);
|
||||
window->setClientModel(clientModel, &tip_info);
|
||||
|
||||
// If '-min' option passed, start window minimized (iconified) or minimized to tray
|
||||
bool start_minimized = gArgs.GetBoolArg("-min", false);
|
||||
#ifdef ENABLE_WALLET
|
||||
if (WalletModel::isWalletEnabled()) {
|
||||
m_wallet_controller = new WalletController(*clientModel, platformStyle, this);
|
||||
window->setWalletController(m_wallet_controller, /*show_loading_minimized=*/start_minimized);
|
||||
if (paymentServer) {
|
||||
paymentServer->setOptionsModel(optionsModel);
|
||||
}
|
||||
if (WalletModel::isWalletEnabled()) {
|
||||
m_wallet_controller = new WalletController(*clientModel, platformStyle, this);
|
||||
window->setWalletController(m_wallet_controller, /*show_loading_minimized=*/start_minimized);
|
||||
if (paymentServer) {
|
||||
paymentServer->setOptionsModel(optionsModel);
|
||||
}
|
||||
}
|
||||
#endif // ENABLE_WALLET
|
||||
|
||||
// Show or minimize window
|
||||
if (!start_minimized) {
|
||||
window->show();
|
||||
} else if (clientModel->getOptionsModel()->getMinimizeToTray() && window->hasTrayIcon()) {
|
||||
// do nothing as the window is managed by the tray icon
|
||||
} else {
|
||||
window->showMinimized();
|
||||
}
|
||||
Q_EMIT windowShown(window);
|
||||
// Show or minimize window
|
||||
if (!start_minimized) {
|
||||
window->show();
|
||||
} else if (clientModel->getOptionsModel()->getMinimizeToTray() && window->hasTrayIcon()) {
|
||||
// do nothing as the window is managed by the tray icon
|
||||
} else {
|
||||
window->showMinimized();
|
||||
}
|
||||
Q_EMIT windowShown(window);
|
||||
|
||||
#ifdef ENABLE_WALLET
|
||||
// Now that initialization/startup is done, process any command-line
|
||||
// bitcoin: URIs or payment requests:
|
||||
if (paymentServer) {
|
||||
connect(paymentServer, &PaymentServer::receivedPaymentRequest, window, &BitcoinGUI::handlePaymentRequest);
|
||||
connect(window, &BitcoinGUI::receivedURI, paymentServer, &PaymentServer::handleURIOrFile);
|
||||
connect(paymentServer, &PaymentServer::message, [this](const QString& title, const QString& message, unsigned int style) {
|
||||
window->message(title, message, style);
|
||||
});
|
||||
QTimer::singleShot(100ms, paymentServer, &PaymentServer::uiReady);
|
||||
}
|
||||
#endif
|
||||
pollShutdownTimer->start(SHUTDOWN_POLLING_DELAY);
|
||||
} else {
|
||||
requestShutdown();
|
||||
// Now that initialization/startup is done, process any command-line
|
||||
// bitcoin: URIs or payment requests:
|
||||
if (paymentServer) {
|
||||
connect(paymentServer, &PaymentServer::receivedPaymentRequest, window, &BitcoinGUI::handlePaymentRequest);
|
||||
connect(window, &BitcoinGUI::receivedURI, paymentServer, &PaymentServer::handleURIOrFile);
|
||||
connect(paymentServer, &PaymentServer::message, [this](const QString& title, const QString& message, unsigned int style) {
|
||||
window->message(title, message, style);
|
||||
});
|
||||
QTimer::singleShot(100ms, paymentServer, &PaymentServer::uiReady);
|
||||
}
|
||||
#endif
|
||||
pollShutdownTimer->start(SHUTDOWN_POLLING_DELAY);
|
||||
}
|
||||
|
||||
void BitcoinApplication::handleRunawayException(const QString &message)
|
||||
|
||||
Reference in New Issue
Block a user