forked from qt-creator/qt-creator
Remove some aggregation deadlocks.
You are not allowed to add components that belong to other aggregate (including aggregates themselves). Warn in this case instead of locking up. Task-number: QTCREATORBUG-4926 Change-Id: I4908fb9019efbc2fa3b7c3c57e08cc1d7f8f3e2c Reviewed-on: http://codereview.qt.nokia.com/679 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Bill King <bill.king@nokia.com>
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include "aggregate.h"
|
||||
|
||||
#include <QtCore/QWriteLocker>
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
/*!
|
||||
\namespace Aggregation
|
||||
@@ -228,6 +229,8 @@ void Aggregate::deleteSelf(QObject *obj)
|
||||
\fn void Aggregate::add(QObject *component)
|
||||
|
||||
Adds the \a component to the aggregate.
|
||||
You can't add a component that is part of a different aggregate
|
||||
or an aggregate itself.
|
||||
|
||||
\sa Aggregate::remove()
|
||||
*/
|
||||
@@ -240,8 +243,10 @@ void Aggregate::add(QObject *component)
|
||||
Aggregate *parentAggregation = aggregateMap().value(component);
|
||||
if (parentAggregation == this)
|
||||
return;
|
||||
if (parentAggregation)
|
||||
parentAggregation->remove(component);
|
||||
if (parentAggregation) {
|
||||
qWarning() << "Cannot add a component that belongs to a different aggregate" << component;
|
||||
return;
|
||||
}
|
||||
m_components.append(component);
|
||||
connect(component, SIGNAL(destroyed(QObject*)), this, SLOT(deleteSelf(QObject*)));
|
||||
aggregateMap().insert(component, this);
|
||||
|
||||
Reference in New Issue
Block a user