diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp
index 6914286dc66789ff8ba69c9c67056d47f91785bd..f5800869f43cf26ae88a43d29328fea224bba3cf 100644
--- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp
@@ -61,7 +61,7 @@ class QmlProfilerEngine::QmlProfilerEnginePrivate
 {
 public:
     QmlProfilerEnginePrivate(QmlProfilerEngine *qq) : q(qq), m_runner(0) {}
-    ~QmlProfilerEnginePrivate() { delete m_runner; }
+    ~QmlProfilerEnginePrivate() { m_runner->disconnect(); delete m_runner; }
 
     bool attach(const QString &address, uint port);
     static AbstractQmlProfilerRunner *createRunner(ProjectExplorer::RunConfiguration *runConfiguration,
@@ -153,6 +153,7 @@ bool QmlProfilerEngine::start()
     QTC_ASSERT(d->m_profilerState, return false);
 
     if (d->m_runner) {
+        d->m_runner->disconnect();
         delete d->m_runner;
         d->m_runner = 0;
     }
@@ -364,6 +365,7 @@ void QmlProfilerEngine::profilerStateChanged()
         // (a new one will be created at start)
         d->m_noDebugOutputTimer.stop();
         if (d->m_runner) {
+            d->m_runner->disconnect();
             delete d->m_runner;
             d->m_runner = 0;
         }