diff options
author | Eike Ziller <eike.ziller@nokia.com> | 2012-09-07 15:20:09 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@nokia.com> | 2012-09-10 12:30:45 +0200 |
commit | b17e944d4bbff3cce7a9a2e9aab7e8b910ca8ad8 (patch) | |
tree | da3d9cebda0b95230cf741a7b33a3aa0e290ae0d /src/libs/aggregation | |
parent | beb6bf29722dcda0c51ef40a7d2368a08852b9c1 (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.cpp | 18 |
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) |