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()
|
||||
{
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user