aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/aggregation
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@nokia.com>2012-09-07 15:20:09 +0200
committerEike Ziller <eike.ziller@nokia.com>2012-09-10 12:30:45 +0200
commitb17e944d4bbff3cce7a9a2e9aab7e8b910ca8ad8 (patch)
treeda3d9cebda0b95230cf741a7b33a3aa0e290ae0d /src/libs/aggregation
parentbeb6bf29722dcda0c51ef40a7d2368a08852b9c1 (diff)
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 <daniel.teske@nokia.com>
Diffstat (limited to 'src/libs/aggregation')
-rw-r--r--src/libs/aggregation/aggregate.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/libs/aggregation/aggregate.cpp b/src/libs/aggregation/aggregate.cpp
index 5af6c1a189..42784faf8e 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<QObject *> 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)