From c49ce24a9254dafd03529dfa6ecf44adce3536e7 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 15 Feb 2022 17:50:33 +0100 Subject: [PATCH] ProcessInterface: Make a copy of ProcessSetupData Don't share the same instance of data with the QtcProcess itself, as some of the fields needs to be modified just for the starting purposes. In this way we avoid cyclic modifications of the original data on subsequent runs. Change-Id: I937978ee92f848d247025939ac5b0c6c60c29ff7 Reviewed-by: Reviewed-by: hjk --- src/libs/utils/qtcprocess.cpp | 41 +++++++++++++++++------------------ src/libs/utils/qtcprocess.h | 2 +- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index e878f7a401c..405b83636b4 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -238,9 +238,9 @@ public: { QTC_CHECK(false); } void customStart(const CommandLine &command, const Environment &environment) override { - m_terminal.setAbortOnMetaChars(m_setup->m_abortOnMetaChars); + m_terminal.setAbortOnMetaChars(m_setup.m_abortOnMetaChars); m_terminal.setCommand(command); - m_terminal.setWorkingDirectory(m_setup->m_workingDirectory); + m_terminal.setWorkingDirectory(m_setup.m_workingDirectory); m_terminal.setEnvironment(environment); m_terminal.start(); } @@ -306,17 +306,16 @@ public: ProcessStartHandler *handler = m_process->processStartHandler(); handler->setProcessMode(m_processMode); handler->setWriteData(writeData); - if (m_setup->m_belowNormalPriority) + if (m_setup.m_belowNormalPriority) handler->setBelowNormalPriority(); - handler->setNativeArguments(m_setup->m_nativeArguments); - m_process->setWorkingDirectory(m_setup->m_workingDirectory.path()); - m_process->setStandardInputFile(m_setup->m_standardInputFile); - m_process->setProcessChannelMode(m_setup->m_procesChannelMode); - m_process->setErrorString(m_setup->m_initialErrorString); - m_setup->m_initialErrorString.clear(); - if (m_setup->m_lowPriority) + handler->setNativeArguments(m_setup.m_nativeArguments); + m_process->setWorkingDirectory(m_setup.m_workingDirectory.path()); + m_process->setStandardInputFile(m_setup.m_standardInputFile); + m_process->setProcessChannelMode(m_setup.m_procesChannelMode); + m_process->setErrorString(m_setup.m_initialErrorString); + if (m_setup.m_lowPriority) m_process->setLowPriority(); - if (m_setup->m_unixTerminalDisabled) + if (m_setup.m_unixTerminalDisabled) m_process->setUnixTerminalDisabled(); m_process->start(program, arguments, handler->openMode()); handler->handleProcessStart(); @@ -402,17 +401,16 @@ public: void start(const QString &program, const QStringList &arguments, const QByteArray &writeData) override { - m_handle->setWorkingDirectory(m_setup->m_workingDirectory); - m_handle->setStandardInputFile(m_setup->m_standardInputFile); - m_handle->setProcessChannelMode(m_setup->m_procesChannelMode); - m_handle->setErrorString(m_setup->m_initialErrorString); - m_setup->m_initialErrorString.clear(); - if (m_setup->m_belowNormalPriority) + m_handle->setWorkingDirectory(m_setup.m_workingDirectory); + m_handle->setStandardInputFile(m_setup.m_standardInputFile); + m_handle->setProcessChannelMode(m_setup.m_procesChannelMode); + m_handle->setErrorString(m_setup.m_initialErrorString); + if (m_setup.m_belowNormalPriority) m_handle->setBelowNormalPriority(); - m_handle->setNativeArguments(m_setup->m_nativeArguments); - if (m_setup->m_lowPriority) + m_handle->setNativeArguments(m_setup.m_nativeArguments); + if (m_setup.m_lowPriority) m_handle->setLowPriority(); - if (m_setup->m_unixTerminalDisabled) + if (m_setup.m_unixTerminalDisabled) m_handle->setUnixTerminalDisabled(); m_handle->start(program, arguments, writeData); } @@ -490,7 +488,8 @@ public: void setProcessInterface(ProcessInterface *process) { m_process.reset(process); - m_process->m_setup = &m_setup; + m_process->m_setup = m_setup; + m_setup.m_initialErrorString.clear(); m_process->setParent(this); connect(m_process.get(), &ProcessInterface::started, diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 383fa812b3d..3f97cb05a7a 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -309,7 +309,7 @@ public: virtual qint64 applicationMainThreadID() const { QTC_CHECK(false); return -1; } const ProcessMode m_processMode; - ProcessSetupData *m_setup = nullptr; + ProcessSetupData m_setup; signals: void started();