forked from qt-creator/qt-creator
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:
@@ -203,14 +203,18 @@ Aggregate::Aggregate(QObject *parent)
|
|||||||
*/
|
*/
|
||||||
Aggregate::~Aggregate()
|
Aggregate::~Aggregate()
|
||||||
{
|
{
|
||||||
|
QList<QObject *> components;
|
||||||
|
{
|
||||||
QWriteLocker locker(&lock());
|
QWriteLocker locker(&lock());
|
||||||
foreach (QObject *component, m_components) {
|
foreach (QObject *component, m_components) {
|
||||||
disconnect(component, SIGNAL(destroyed(QObject*)), this, SLOT(deleteSelf(QObject*)));
|
disconnect(component, SIGNAL(destroyed(QObject*)), this, SLOT(deleteSelf(QObject*)));
|
||||||
aggregateMap().remove(component);
|
aggregateMap().remove(component);
|
||||||
}
|
}
|
||||||
qDeleteAll(m_components);
|
components = m_components;
|
||||||
m_components.clear();
|
m_components.clear();
|
||||||
aggregateMap().remove(this);
|
aggregateMap().remove(this);
|
||||||
|
}
|
||||||
|
qDeleteAll(components);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aggregate::deleteSelf(QObject *obj)
|
void Aggregate::deleteSelf(QObject *obj)
|
||||||
|
|||||||
Reference in New Issue
Block a user