diff --git a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp index 982a4a4ab96..56c39c06973 100644 --- a/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp @@ -38,6 +38,16 @@ QmlProfilerClientManager::QmlProfilerClientManager(QObject *parent) : QObject(pa setObjectName(QLatin1String("QML Profiler Connections")); } +QmlProfilerClientManager::~QmlProfilerClientManager() +{ + // Don't receive any signals from the dtors of child objects while our own dtor is running. + // That can lead to invalid reads. + if (m_connection) + m_connection->disconnect(); + if (m_qmlclientplugin) + m_qmlclientplugin->disconnect(); +} + void QmlProfilerClientManager::setModelManager(QmlProfilerModelManager *m) { QTC_ASSERT(m_connection.isNull() && m_qmlclientplugin.isNull(), disconnectClient()); diff --git a/src/plugins/qmlprofiler/qmlprofilerclientmanager.h b/src/plugins/qmlprofiler/qmlprofilerclientmanager.h index 68508c0254d..8357acd8c7c 100644 --- a/src/plugins/qmlprofiler/qmlprofilerclientmanager.h +++ b/src/plugins/qmlprofiler/qmlprofilerclientmanager.h @@ -46,6 +46,7 @@ class QmlProfilerClientManager : public QObject Q_OBJECT public: explicit QmlProfilerClientManager(QObject *parent = 0); + ~QmlProfilerClientManager(); void setProfilerStateManager(QmlProfilerStateManager *profilerState); void setTcpConnection(QString host, Utils::Port port);