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>
This commit is contained in:
Eike Ziller
2012-09-07 15:20:09 +02:00
parent beb6bf2972
commit b17e944d4b

View File

@@ -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)