From 6f53022a11ef2a38704b0f35c9ea097c2e715bca Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 5 May 2021 15:40:43 +0200 Subject: [PATCH] Utils: Merge TerminalControllingProcess into QtcProcess Effectively only a single flag controlling a call to setsid(). Change-Id: I6a2be35df1bddc81702575678ee3a065a71cecf5 Reviewed-by: Christian Stenger --- src/libs/utils/qtcprocess.cpp | 4 +++ src/libs/utils/qtcprocess.h | 2 ++ src/libs/utils/synchronousprocess.cpp | 48 +-------------------------- 3 files changed, 7 insertions(+), 47 deletions(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 53bae9da539..f425bc9b41c 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -1270,6 +1270,10 @@ void QtcProcess::setupChildProcess_impl() if (::nice(5) == -1 && errno != 0) perror("Failed to set nice value"); } + + // Disable terminal by becoming a session leader. + if (m_disableUnixTerminal) + setsid(); #endif } diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index cb5f8b8812f..613f0672a35 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -46,6 +46,7 @@ public: void terminate(); void interrupt(); void setLowPriority() { m_lowPriority = true; } + void setDisableUnixTerminal() { m_disableUnixTerminal = true; } class QTCREATOR_UTILS_EXPORT Arguments { @@ -177,6 +178,7 @@ private: bool m_haveEnv = false; bool m_useCtrlCStub = false; bool m_lowPriority = false; + bool m_disableUnixTerminal = false; bool m_synchronous = false; OpenMode m_openMode = ReadWrite; diff --git a/src/libs/utils/synchronousprocess.cpp b/src/libs/utils/synchronousprocess.cpp index 9d14dd9016c..39a4bb9baf4 100644 --- a/src/libs/utils/synchronousprocess.cpp +++ b/src/libs/utils/synchronousprocess.cpp @@ -43,10 +43,6 @@ #include #include -#ifdef Q_OS_UNIX -# include -#endif - /*! \class Utils::SynchronousProcess @@ -87,48 +83,6 @@ namespace Utils { static Q_LOGGING_CATEGORY(processLog, "qtc.utils.synchronousprocess", QtWarningMsg); -// A special QProcess derivative allowing for terminal control. -class TerminalControllingProcess : public QtcProcess -{ -public: - TerminalControllingProcess(); - - void setDisableUnixTerminal() { m_disableUnixTerminal = true; } - -protected: -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - void setupChildProcess() override; -#endif - -private: - void setupChildProcess_impl(); - - bool m_disableUnixTerminal = false; -}; - -TerminalControllingProcess::TerminalControllingProcess() -{ -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && defined(Q_OS_UNIX) - setChildProcessModifier([this] { setupChildProcess_impl(); }); -#endif -} - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -void TerminalControllingProcess::setupChildProcess() -{ - setupChildProcess_impl(); -} -#endif - -void TerminalControllingProcess::setupChildProcess_impl() -{ -#ifdef Q_OS_UNIX - // Disable terminal by becoming a session leader. - if (m_disableUnixTerminal) - setsid(); -#endif -} - // ----------- SynchronousProcessResponse void SynchronousProcessResponse::clear() { @@ -286,7 +240,7 @@ public: void clearForRun(); QTextCodec *m_codec = QTextCodec::codecForLocale(); - TerminalControllingProcess m_process; + QtcProcess m_process; QTimer m_timer; QEventLoop m_eventLoop; SynchronousProcessResponse m_result;