aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-02-28 12:03:46 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-28 10:58:06 +0100
commit0507afe3fc13640fbf7d1a79c6699337b31498fc (patch)
tree48aac25f3b65be86c5fe41e5b0e5b3ba3bf26e28 /src
parent328c100ab3fc4d5ddccb0d19af9d7e87bd849f0b (diff)
Properly cleanup cancelled incubation.
Not all allocations were being destroyed. Change-Id: I2134bb224c58b947cfb990b0af2f6eedfd36da4a Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickvisualdatamodel.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/quick/items/qquickvisualdatamodel.cpp b/src/quick/items/qquickvisualdatamodel.cpp
index 0bdf0cb5af..3aa6077d32 100644
--- a/src/quick/items/qquickvisualdatamodel.cpp
+++ b/src/quick/items/qquickvisualdatamodel.cpp
@@ -461,8 +461,28 @@ void QQuickVisualDataModel::cancel(int index)
Compositor::iterator it = d->m_compositor.find(d->m_compositorGroup, index);
QQuickVisualDataModelItem *cacheItem = it->inCache() ? d->m_cache.at(it.cacheIndex) : 0;
- if (cacheItem && cacheItem->incubationTask)
- d->releaseIncubator(cacheItem->incubationTask);
+ if (cacheItem) {
+ if (cacheItem->incubationTask) {
+ delete cacheItem->incubationTask->incubatingContext;
+ cacheItem->incubationTask->incubatingContext = 0;
+ d->releaseIncubator(cacheItem->incubationTask);
+ cacheItem->incubationTask = 0;
+ }
+ if (cacheItem->object && !cacheItem->isObjectReferenced()) {
+ d->destroy(cacheItem->object);
+ if (QDeclarativePackage *package = qobject_cast<QDeclarativePackage *>(cacheItem->object))
+ d->emitDestroyingPackage(package);
+ else if (QQuickItem *item = qobject_cast<QQuickItem *>(cacheItem->object))
+ d->emitDestroyingItem(item);
+ cacheItem->object = 0;
+ }
+ if (!cacheItem->isReferenced()) {
+ d->m_compositor.clearFlags(Compositor::Cache, it.cacheIndex, 1, Compositor::CacheFlag);
+ d->m_cache.removeAt(it.cacheIndex);
+ delete cacheItem;
+ Q_ASSERT(d->m_cache.count() == d->m_compositor.count(Compositor::Cache));
+ }
+ }
}
void QQuickVisualDataModelPrivate::group_append(