From b17e944d4bbff3cce7a9a2e9aab7e8b910ca8ad8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 7 Sep 2012 15:20:09 +0200 Subject: [PATCH] Fix freeze when clearing search results while doing a search in search By fixing a deadlock in aggregate destructor. Task-number: QTCREATORBUG-7757 Change-Id: I6dffb06a92fb57b23a38b26b1528aed9f9f9d5da Reviewed-by: Daniel Teske --- src/libs/aggregation/aggregate.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/libs/aggregation/aggregate.cpp b/src/libs/aggregation/aggregate.cpp index 5af6c1a189f..42784faf8e9 100644 --- a/src/libs/aggregation/aggregate.cpp +++ b/src/libs/aggregation/aggregate.cpp @@ -203,14 +203,18 @@ Aggregate::Aggregate(QObject *parent) */ Aggregate::~Aggregate() { - QWriteLocker locker(&lock()); - foreach (QObject *component, m_components) { - disconnect(component, SIGNAL(destroyed(QObject*)), this, SLOT(deleteSelf(QObject*))); - aggregateMap().remove(component); + QList components; + { + QWriteLocker locker(&lock()); + foreach (QObject *component, m_components) { + disconnect(component, SIGNAL(destroyed(QObject*)), this, SLOT(deleteSelf(QObject*))); + aggregateMap().remove(component); + } + components = m_components; + m_components.clear(); + aggregateMap().remove(this); } - qDeleteAll(m_components); - m_components.clear(); - aggregateMap().remove(this); + qDeleteAll(components); } void Aggregate::deleteSelf(QObject *obj)