forked from qt-creator/qt-creator
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: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -238,9 +238,9 @@ public:
|
|||||||
{ QTC_CHECK(false); }
|
{ QTC_CHECK(false); }
|
||||||
void customStart(const CommandLine &command, const Environment &environment) override
|
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.setCommand(command);
|
||||||
m_terminal.setWorkingDirectory(m_setup->m_workingDirectory);
|
m_terminal.setWorkingDirectory(m_setup.m_workingDirectory);
|
||||||
m_terminal.setEnvironment(environment);
|
m_terminal.setEnvironment(environment);
|
||||||
m_terminal.start();
|
m_terminal.start();
|
||||||
}
|
}
|
||||||
@@ -306,17 +306,16 @@ public:
|
|||||||
ProcessStartHandler *handler = m_process->processStartHandler();
|
ProcessStartHandler *handler = m_process->processStartHandler();
|
||||||
handler->setProcessMode(m_processMode);
|
handler->setProcessMode(m_processMode);
|
||||||
handler->setWriteData(writeData);
|
handler->setWriteData(writeData);
|
||||||
if (m_setup->m_belowNormalPriority)
|
if (m_setup.m_belowNormalPriority)
|
||||||
handler->setBelowNormalPriority();
|
handler->setBelowNormalPriority();
|
||||||
handler->setNativeArguments(m_setup->m_nativeArguments);
|
handler->setNativeArguments(m_setup.m_nativeArguments);
|
||||||
m_process->setWorkingDirectory(m_setup->m_workingDirectory.path());
|
m_process->setWorkingDirectory(m_setup.m_workingDirectory.path());
|
||||||
m_process->setStandardInputFile(m_setup->m_standardInputFile);
|
m_process->setStandardInputFile(m_setup.m_standardInputFile);
|
||||||
m_process->setProcessChannelMode(m_setup->m_procesChannelMode);
|
m_process->setProcessChannelMode(m_setup.m_procesChannelMode);
|
||||||
m_process->setErrorString(m_setup->m_initialErrorString);
|
m_process->setErrorString(m_setup.m_initialErrorString);
|
||||||
m_setup->m_initialErrorString.clear();
|
if (m_setup.m_lowPriority)
|
||||||
if (m_setup->m_lowPriority)
|
|
||||||
m_process->setLowPriority();
|
m_process->setLowPriority();
|
||||||
if (m_setup->m_unixTerminalDisabled)
|
if (m_setup.m_unixTerminalDisabled)
|
||||||
m_process->setUnixTerminalDisabled();
|
m_process->setUnixTerminalDisabled();
|
||||||
m_process->start(program, arguments, handler->openMode());
|
m_process->start(program, arguments, handler->openMode());
|
||||||
handler->handleProcessStart();
|
handler->handleProcessStart();
|
||||||
@@ -402,17 +401,16 @@ public:
|
|||||||
|
|
||||||
void start(const QString &program, const QStringList &arguments, const QByteArray &writeData) override
|
void start(const QString &program, const QStringList &arguments, const QByteArray &writeData) override
|
||||||
{
|
{
|
||||||
m_handle->setWorkingDirectory(m_setup->m_workingDirectory);
|
m_handle->setWorkingDirectory(m_setup.m_workingDirectory);
|
||||||
m_handle->setStandardInputFile(m_setup->m_standardInputFile);
|
m_handle->setStandardInputFile(m_setup.m_standardInputFile);
|
||||||
m_handle->setProcessChannelMode(m_setup->m_procesChannelMode);
|
m_handle->setProcessChannelMode(m_setup.m_procesChannelMode);
|
||||||
m_handle->setErrorString(m_setup->m_initialErrorString);
|
m_handle->setErrorString(m_setup.m_initialErrorString);
|
||||||
m_setup->m_initialErrorString.clear();
|
if (m_setup.m_belowNormalPriority)
|
||||||
if (m_setup->m_belowNormalPriority)
|
|
||||||
m_handle->setBelowNormalPriority();
|
m_handle->setBelowNormalPriority();
|
||||||
m_handle->setNativeArguments(m_setup->m_nativeArguments);
|
m_handle->setNativeArguments(m_setup.m_nativeArguments);
|
||||||
if (m_setup->m_lowPriority)
|
if (m_setup.m_lowPriority)
|
||||||
m_handle->setLowPriority();
|
m_handle->setLowPriority();
|
||||||
if (m_setup->m_unixTerminalDisabled)
|
if (m_setup.m_unixTerminalDisabled)
|
||||||
m_handle->setUnixTerminalDisabled();
|
m_handle->setUnixTerminalDisabled();
|
||||||
m_handle->start(program, arguments, writeData);
|
m_handle->start(program, arguments, writeData);
|
||||||
}
|
}
|
||||||
@@ -490,7 +488,8 @@ public:
|
|||||||
void setProcessInterface(ProcessInterface *process)
|
void setProcessInterface(ProcessInterface *process)
|
||||||
{
|
{
|
||||||
m_process.reset(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);
|
m_process->setParent(this);
|
||||||
|
|
||||||
connect(m_process.get(), &ProcessInterface::started,
|
connect(m_process.get(), &ProcessInterface::started,
|
||||||
|
|||||||
@@ -309,7 +309,7 @@ public:
|
|||||||
virtual qint64 applicationMainThreadID() const { QTC_CHECK(false); return -1; }
|
virtual qint64 applicationMainThreadID() const { QTC_CHECK(false); return -1; }
|
||||||
|
|
||||||
const ProcessMode m_processMode;
|
const ProcessMode m_processMode;
|
||||||
ProcessSetupData *m_setup = nullptr;
|
ProcessSetupData m_setup;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void started();
|
void started();
|
||||||
|
|||||||
Reference in New Issue
Block a user