diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2012-11-23 14:47:08 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2012-11-23 16:14:42 +0100 |
commit | 425a82d4121761ff7233111f3f8495e292779535 (patch) | |
tree | 14698f3f64b8638f05218df90950ba3555dabada | |
parent | 58d15d572b465e9a571213a8f0504ffb90976b1c (diff) |
call Application::userInterrupt() directly from signal handler
Sending a signal will leave the interrupt request unhandled until
we get in the application's event loop.
Change-Id: I6e9d34ad8574c59d6b26e879e56fc0cb76b34141
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r-- | src/app/qbs/application.cpp | 7 | ||||
-rw-r--r-- | src/app/qbs/application.h | 4 | ||||
-rw-r--r-- | src/app/qbs/ctrlchandler.cpp | 16 |
3 files changed, 17 insertions, 10 deletions
diff --git a/src/app/qbs/application.cpp b/src/app/qbs/application.cpp index c12b78027..c91f95d9f 100644 --- a/src/app/qbs/application.cpp +++ b/src/app/qbs/application.cpp @@ -31,7 +31,6 @@ #include "consoleprogressobserver.h" #include "ctrlchandler.h" - #include <logging/logger.h> #include <logging/translator.h> @@ -55,8 +54,14 @@ void Application::init() setOrganizationDomain(QLatin1String("qt-project.org")); } +/** + * Interrupt the application. This is directly called from a signal handler. + */ void Application::userInterrupt() { + if (!m_observer) + return; + qbsInfo() << Tr::tr("Received termination request from user; canceling build. [pid=%1]") .arg(applicationPid()); m_observer->setCanceled(true); diff --git a/src/app/qbs/application.h b/src/app/qbs/application.h index 347e404e7..19a617599 100644 --- a/src/app/qbs/application.h +++ b/src/app/qbs/application.h @@ -44,10 +44,8 @@ public: static Application *instance(); void init(); - ConsoleProgressObserver *observer() const { return m_observer; } - -public slots: void userInterrupt(); + ConsoleProgressObserver *observer() const { return m_observer; } private: ConsoleProgressObserver * const m_observer; diff --git a/src/app/qbs/ctrlchandler.cpp b/src/app/qbs/ctrlchandler.cpp index cf496af6b..addb46a6c 100644 --- a/src/app/qbs/ctrlchandler.cpp +++ b/src/app/qbs/ctrlchandler.cpp @@ -27,10 +27,14 @@ ** ****************************************************************************/ -#include <QtGlobal> -#include <QCoreApplication> -#include <QDebug> -#include <QTimer> +#include "application.h" + +static void cancel() +{ + qbs::Application * const app = qbs::Application::instance(); + if (app) + app->userInterrupt(); +} #if defined(Q_OS_WIN) && defined(Q_CC_MSVC) @@ -39,7 +43,7 @@ static BOOL WINAPI consoleCtrlHandlerRoutine(__in DWORD dwCtrlType) { Q_UNUSED(dwCtrlType); - QTimer::singleShot(0, qApp, SLOT(userInterrupt())); + cancel(); return TRUE; } @@ -55,7 +59,7 @@ void installCtrlCHandler() static void sigIntHandler(int sig) { Q_UNUSED(sig); - QTimer::singleShot(0, qApp, SLOT(userInterrupt())); + cancel(); } void installCtrlCHandler() |