diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp
index 4a166c17bb6227bb95a21018f5c916f5774d5174..52344d645627d730f6ddba04e2e70410ed3d999e 100644
--- a/src/quick/items/qquickcanvas.cpp
+++ b/src/quick/items/qquickcanvas.cpp
@@ -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();
     }