diff --git a/src/apps/deskflow-core/deskflow-core.cpp b/src/apps/deskflow-core/deskflow-core.cpp index 993dd7eb7..3ea5a8919 100644 --- a/src/apps/deskflow-core/deskflow-core.cpp +++ b/src/apps/deskflow-core/deskflow-core.cpp @@ -111,9 +111,13 @@ int main(int argc, char **argv) QObject::connect(&coreThread, &QThread::finished, &app, &QApplication::quit); coreApp->run(coreThread); - const auto exitCode = QApplication::exec(); + int exitCode = QApplication::exec(); coreThread.wait(); + if (exitCode == s_exitSuccess) { + exitCode = coreApp->getExitCode(); + } + LOG_DEBUG("core exited, code: %d", exitCode); return exitCode; } diff --git a/src/lib/deskflow/App.cpp b/src/lib/deskflow/App.cpp index 36a00b6f7..6ae41e161 100644 --- a/src/lib/deskflow/App.cpp +++ b/src/lib/deskflow/App.cpp @@ -109,7 +109,7 @@ void App::run(QThread &coreThread) if (result == s_exitSuccess) { LOG_INFO("core stopped successfully"); } else { - // TODO: surface error code to main thread somehow + updateExitCode(result); LOG_ERR("core stopped with error code: %d", result); } diff --git a/src/lib/deskflow/App.h b/src/lib/deskflow/App.h index c3846d8fe..dc8c6e811 100644 --- a/src/lib/deskflow/App.h +++ b/src/lib/deskflow/App.h @@ -10,6 +10,7 @@ #include "base/EventQueue.h" #include "base/Log.h" +#include "common/ExitCodes.h" #include "deskflow/IApp.h" #include "net/SocketMultiplexer.h" @@ -107,6 +108,16 @@ public: void handleScreenError() const; + void updateExitCode(int errorCode) + { + m_exitCode = errorCode; + } + + int getExitCode() const + { + return m_exitCode; + } + protected: void runEventsLoop(const void *); @@ -118,6 +129,7 @@ private: ARCH_APP_UTIL m_appUtil; std::unique_ptr m_socketMultiplexer; QString m_pname; + int m_exitCode = s_exitSuccess; }; #if !defined(WINAPI_LIBEI) && WINAPI_XWINDOWS