aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/qtcprocess.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2022-10-18 21:59:53 +0300
committerOrgad Shaneh <orgad.shaneh@audiocodes.com>2022-10-19 09:12:14 +0300
commit7edf7435836d044e05cdf0493861c07f4e91d367 (patch)
treef76d3be9e1230e7cea02f5d423d7a3a430c1abb8 /src/libs/utils/qtcprocess.cpp
parentf1fc14acc9c22f11211bcf9f7184e362a06a8a7b (diff)
parentada6989079aec2b533774cfff045220392641d31 (diff)
Merge remote-tracking branch 'origin/9.0'
Diffstat (limited to 'src/libs/utils/qtcprocess.cpp')
-rw-r--r--src/libs/utils/qtcprocess.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp
index 1ffbccea6f1..285ba25eb42 100644
--- a/src/libs/utils/qtcprocess.cpp
+++ b/src/libs/utils/qtcprocess.cpp
@@ -634,6 +634,8 @@ public:
void setProcessInterface(ProcessInterface *process)
{
+ if (m_process)
+ m_process->disconnect();
m_process.reset(process);
m_process->setParent(this);
connect(m_process.get(), &ProcessInterface::started,
@@ -805,6 +807,14 @@ GeneralProcessBlockingImpl::GeneralProcessBlockingImpl(QtcProcessPrivate *parent
// In order to move the process interface into another thread together with handle
parent->m_process.get()->setParent(m_processHandler.get());
m_processHandler->setParent(this);
+ // So the hierarchy looks like:
+ // QtcProcessPrivate
+ // |
+ // +- GeneralProcessBlockingImpl
+ // |
+ // +- ProcessInterfaceHandler
+ // |
+ // +- ProcessInterface
}
bool GeneralProcessBlockingImpl::waitForSignal(ProcessSignalType newSignal, int msecs)
@@ -998,6 +1008,8 @@ QtcProcess::~QtcProcess()
{
QTC_ASSERT(!d->m_guard.isLocked(), qWarning("Deleting QtcProcess instance directly from "
"one of its signal handlers will lead to crash!"));
+ if (d->m_process)
+ d->m_process->disconnect();
delete d;
}