Make sure polish() is reentrant.
authorJustin McPherson <justin.mcpherson@nokia.com>
Tue, 7 Feb 2012 05:31:28 +0000 (15:31 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 13 Feb 2012 01:58:23 +0000 (02:58 +0100)
Take a copy of the items currently scheduled for polish (and clear the internal
list) to ensure an item can re-add itself to the polish list during an
updatePolish().

Change-Id: I0c629795f64d5926ac87a838ea5e216b6a1fa6cf
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
src/quick/items/qquickcanvas.cpp

index 4a166c1..52344d6 100644 (file)
@@ -197,10 +197,11 @@ void QQuickCanvas::focusInEvent(QFocusEvent *)
 
 void QQuickCanvasPrivate::polishItems()
 {
-    while (!itemsToPolish.isEmpty()) {
-        QSet<QQuickItem *>::Iterator iter = itemsToPolish.begin();
-        QQuickItem *item = *iter;
-        itemsToPolish.erase(iter);
+    QSet<QQuickItem *> itms = itemsToPolish;
+    itemsToPolish.clear();
+
+    for (QSet<QQuickItem *>::iterator it = itms.begin(); it != itms.end(); ++it) {
+        QQuickItem *item = *it;
         QQuickItemPrivate::get(item)->polishScheduled = false;
         item->updatePolish();
     }