aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorJustin McPherson <justin.mcpherson@nokia.com>2012-02-07 15:31:28 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-13 02:58:23 +0100
commita60635a3cf5d054f0675d31aab4153f16d78324f (patch)
tree3ae1cb1a451de4384212acb68f1ae933a3259a4d /src/quick
parente99c5a3f113bbc1b8f8db996b4b0d5715eea2d89 (diff)
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>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquickcanvas.cpp9
1 files 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();
}