ProcessInterface: Add sendControlSignal() method

It substitutes terminate, kill, interrupt and kickoffProcess
methods.

Task-number: QTCREATORBUG-27358
Change-Id: I9e952c2f4c1a7e76339366566f2c804a3df30347
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-04-11 19:45:04 +02:00
parent 25be242c6f
commit 7c8b5648fe
5 changed files with 80 additions and 71 deletions

View File

@@ -347,10 +347,23 @@ public:
}
~QProcessImpl() final { ProcessReaper::reap(m_process); }
void interrupt() final { ProcessHelper::interruptProcess(m_process); }
void terminate() final { ProcessHelper::terminateProcess(m_process); }
void kill() final { m_process->kill(); }
qint64 write(const QByteArray &data) final { return m_process->write(data); }
void sendControlSignal(ControlSignal controlSignal) final {
switch (controlSignal) {
case ControlSignal::Terminate:
ProcessHelper::terminateProcess(m_process);
break;
case ControlSignal::Kill:
m_process->kill();
break;
case ControlSignal::Interrupt:
ProcessHelper::interruptProcess(m_process);
break;
case ControlSignal::KickOff:
QTC_CHECK(false);
break;
}
}
QProcess::ProcessState state() const final { return m_process->state(); }
@@ -432,14 +445,24 @@ public:
m_handle = nullptr;
}
void interrupt() final
{
if (m_setup->m_useCtrlCStub) // bypass launcher and interrupt directly
ProcessHelper::interruptPid(m_handle->processId());
}
void terminate() final { m_handle->terminate(); }
void kill() final { m_handle->kill(); }
qint64 write(const QByteArray &data) final { return m_handle->write(data); }
void sendControlSignal(ControlSignal controlSignal) final {
switch (controlSignal) {
case ControlSignal::Terminate:
m_handle->terminate();
break;
case ControlSignal::Kill:
m_handle->kill();
break;
case ControlSignal::Interrupt:
if (m_setup->m_useCtrlCStub) // bypass launcher and interrupt directly
ProcessHelper::interruptPid(m_handle->processId());
break;
case ControlSignal::KickOff:
QTC_CHECK(false);
break;
}
}
QProcess::ProcessState state() const final { return m_handle->state(); }
@@ -599,11 +622,6 @@ ProcessResult QtcProcessPrivate::interpretExitCode(int exitCode)
} // Internal
void ProcessInterface::kickoffProcess()
{
QTC_CHECK(false);
}
/*!
\class Utils::QtcProcess
@@ -805,13 +823,25 @@ void QtcProcess::start()
void QtcProcess::terminate()
{
if (d->m_process)
d->m_process->terminate();
d->m_process->sendControlSignal(ControlSignal::Terminate);
}
void QtcProcess::kill()
{
if (d->m_process)
d->m_process->sendControlSignal(ControlSignal::Kill);
}
void QtcProcess::interrupt()
{
if (d->m_process)
d->m_process->interrupt();
d->m_process->sendControlSignal(ControlSignal::Interrupt);
}
void QtcProcess::kickoffProcess()
{
if (d->m_process)
d->m_process->sendControlSignal(ControlSignal::KickOff);
}
bool QtcProcess::startDetached(const CommandLine &cmd, const FilePath &workingDirectory, qint64 *pid)
@@ -1115,12 +1145,6 @@ Environment QtcProcess::systemEnvironmentForBinary(const FilePath &filePath)
return Environment::systemEnvironment();
}
void QtcProcess::kickoffProcess()
{
if (d->m_process)
d->m_process->kickoffProcess();
}
qint64 QtcProcess::applicationMainThreadId() const
{
return d->m_applicationMainThreadId;
@@ -1181,12 +1205,6 @@ QByteArray QtcProcess::readAllStandardError()
return buf;
}
void QtcProcess::kill()
{
if (d->m_process)
d->m_process->kill();
}
qint64 QtcProcess::write(const QByteArray &input)
{
QTC_ASSERT(processMode() == ProcessMode::Writer, return -1);