diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-07-06 16:43:06 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-07-07 08:51:48 +0000 |
commit | 78958d574097e2b8ceb2811d257ef4348e741a03 (patch) | |
tree | 1d6844461802c04f29c089f98a233db025e5c675 /src/libs/utils/terminalprocess.cpp | |
parent | 5d8e53038eb13f03d75774d09867a45ffecd0018 (diff) |
TerminalProcess: Emit done() signal when stop() was called
When we call QtcProcess::stop(), the terminal process invokes
stopProcess() method. However, if it doesn't emit done() then
subsequent call to waitForFinished() will timeout with 30 s.
This should fix the 30 seconds hang when debugging in terminal
after pressing the red square button.
Change-Id: Iea1f9ade85dc8a4414dc49d7c8a2cbe80f0b5756
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/libs/utils/terminalprocess.cpp')
-rw-r--r-- | src/libs/utils/terminalprocess.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/libs/utils/terminalprocess.cpp b/src/libs/utils/terminalprocess.cpp index 556ae5dc3c0..17a15adc4a1 100644 --- a/src/libs/utils/terminalprocess.cpp +++ b/src/libs/utils/terminalprocess.cpp @@ -483,29 +483,26 @@ void TerminalImpl::killProcess() void TerminalImpl::killStub() { + if (!isRunning()) + return; + #ifdef Q_OS_WIN - if (d->m_pid) { - TerminateProcess(d->m_pid->hProcess, (unsigned)-1); - WaitForSingleObject(d->m_pid->hProcess, INFINITE); - cleanupStub(); - } + TerminateProcess(d->m_pid->hProcess, (unsigned)-1); + WaitForSingleObject(d->m_pid->hProcess, INFINITE); + cleanupStub(); #else sendCommand('s'); stubServerShutdown(); + d->m_process.waitForFinished(); #endif + + emitFinished(-1, QProcess::CrashExit); } void TerminalImpl::stopProcess() { killProcess(); killStub(); - if (isRunning() && HostOsInfo::isAnyUnixHost()) { - d->m_process.terminate(); - if (!d->m_process.waitForFinished(1000) && d->m_process.state() == QProcess::Running) { - d->m_process.kill(); - d->m_process.waitForFinished(); - } - } } bool TerminalImpl::isRunning() const |