diff options
| -rw-r--r-- | src/declarative/qml/qdeclarativelistmodelworkeragent.cpp | 7 | ||||
| -rw-r--r-- | src/declarative/qml/qdeclarativelistmodelworkeragent_p.h | 2 | ||||
| -rw-r--r-- | src/declarative/qml/qdeclarativeworkerscript.cpp | 4 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/declarative/qml/qdeclarativelistmodelworkeragent.cpp b/src/declarative/qml/qdeclarativelistmodelworkeragent.cpp index 1848cf02f0..91c0a6c031 100644 --- a/src/declarative/qml/qdeclarativelistmodelworkeragent.cpp +++ b/src/declarative/qml/qdeclarativelistmodelworkeragent.cpp @@ -92,6 +92,13 @@ QDeclarativeListModelWorkerAgent::QDeclarativeListModelWorkerAgent(QDeclarativeL { } +QDeclarativeListModelWorkerAgent::~QDeclarativeListModelWorkerAgent() +{ + mutex.lock(); + syncDone.wakeAll(); + mutex.unlock(); +} + void QDeclarativeListModelWorkerAgent::setV8Engine(QV8Engine *eng) { m_copy->m_engine = eng; diff --git a/src/declarative/qml/qdeclarativelistmodelworkeragent_p.h b/src/declarative/qml/qdeclarativelistmodelworkeragent_p.h index 7263afb4e0..6c97fc54b4 100644 --- a/src/declarative/qml/qdeclarativelistmodelworkeragent_p.h +++ b/src/declarative/qml/qdeclarativelistmodelworkeragent_p.h @@ -75,7 +75,7 @@ class QDeclarativeListModelWorkerAgent : public QObject public: QDeclarativeListModelWorkerAgent(QDeclarativeListModel *); - + ~QDeclarativeListModelWorkerAgent(); void setV8Engine(QV8Engine *eng); void addref(); diff --git a/src/declarative/qml/qdeclarativeworkerscript.cpp b/src/declarative/qml/qdeclarativeworkerscript.cpp index ee325c16f2..bc7e645bec 100644 --- a/src/declarative/qml/qdeclarativeworkerscript.cpp +++ b/src/declarative/qml/qdeclarativeworkerscript.cpp @@ -478,6 +478,10 @@ QDeclarativeWorkerScriptEngine::~QDeclarativeWorkerScriptEngine() QCoreApplication::postEvent(d, new QEvent((QEvent::Type)QDeclarativeWorkerScriptEnginePrivate::WorkerDestroyEvent)); d->m_lock.unlock(); + //We have to force to cleanup the main thread's event queue here + //to make sure the main GUI release all pending locks/wait conditions which + //some worker script/agent are waiting for (QDeclarativeListModelWorkerAgent::sync() for example). + QCoreApplication::processEvents(); wait(); d->deleteLater(); } |
