From a60635a3cf5d054f0675d31aab4153f16d78324f Mon Sep 17 00:00:00 2001 From: Justin McPherson <justin.mcpherson@nokia.com> Date: Tue, 7 Feb 2012 15:31:28 +1000 Subject: [PATCH] Make sure polish() is reentrant. 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 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/quick/items/qquickcanvas.cpp b/src/quick/items/qquickcanvas.cpp index 4a166c17bb..52344d6456 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(); } -- GitLab