diff options
author | Martin Jones <martin.jones@nokia.com> | 2012-02-28 12:03:46 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-28 10:58:06 +0100 |
commit | 0507afe3fc13640fbf7d1a79c6699337b31498fc (patch) | |
tree | 48aac25f3b65be86c5fe41e5b0e5b3ba3bf26e28 /src | |
parent | 328c100ab3fc4d5ddccb0d19af9d7e87bd849f0b (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.cpp | 24 |
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( |