diff -rub qtdeclarative-opensource-src-5.0.2/src/qml/qml/qqmlincubator.cpp foo/src/qml/qml/qqmlincubator.cpp --- qtdeclarative-opensource-src-5.0.2/src/qml/qml/qqmlincubator.cpp 2013-04-09 00:11:26.000000000 +0000 +++ foo/src/qml/qml/qqmlincubator.cpp 2013-10-08 08:31:50.107185990 +0000 @@ -257,6 +257,16 @@ Q_UNUSED(incubatingObjectCount); } +void QQmlIncubatorPrivate::forceCompletion(QQmlVME::Interrupt &i) +{ + while (QQmlIncubator::Loading == status) { + while (QQmlIncubator::Loading == status && !waitingFor.isEmpty()) + static_cast(waitingFor.first())->forceCompletion(i); + if (QQmlIncubator::Loading == status) + incubate(i); + } +} + void QQmlIncubatorPrivate::incubate(QQmlVME::Interrupt &i) { if (!compiledData) @@ -587,12 +597,7 @@ void QQmlIncubator::forceCompletion() { QQmlVME::Interrupt i; - while (Loading == status()) { - while (Loading == status() && !d->waitingFor.isEmpty()) - static_cast(d->waitingFor.first())->incubate(i); - if (Loading == status()) - d->incubate(i); - } + d->forceCompletion(i); } /*! diff -rub qtdeclarative-opensource-src-5.0.2/src/qml/qml/qqmlincubator_p.h foo/src/qml/qml/qqmlincubator_p.h --- qtdeclarative-opensource-src-5.0.2/src/qml/qml/qqmlincubator_p.h 2013-04-09 00:11:26.000000000 +0000 +++ foo/src/qml/qml/qqmlincubator_p.h 2013-10-08 08:28:31.915701200 +0000 @@ -99,6 +99,7 @@ void clear(); + void forceCompletion(QQmlVME::Interrupt &i); void incubate(QQmlVME::Interrupt &i); };