summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/QmlChanges.txt2
-rw-r--r--src/declarative/util/qdeclarativepixmapcache.cpp16
2 files changed, 15 insertions, 3 deletions
diff --git a/src/declarative/QmlChanges.txt b/src/declarative/QmlChanges.txt
index 6ab77a7..847f1f5 100644
--- a/src/declarative/QmlChanges.txt
+++ b/src/declarative/QmlChanges.txt
@@ -62,7 +62,7 @@ MouseArea {
becomes
-Import “foo.js” as Foo
+import “foo.js” as Foo
MouseArea {
onClicked: Foo.foo()
}
diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp
index 1d90bf8..fe5863f 100644
--- a/src/declarative/util/qdeclarativepixmapcache.cpp
+++ b/src/declarative/util/qdeclarativepixmapcache.cpp
@@ -114,6 +114,7 @@ private:
QList<QDeclarativePixmapReply*> cancelled;
QDeclarativeEngine *engine;
QDeclarativeImageRequestHandler *handler;
+ QWaitCondition started;
QMutex mutex;
static QHash<QDeclarativeEngine *,QDeclarativeImageReader*> readers;
@@ -370,8 +371,15 @@ QDeclarativeImageReader::~QDeclarativeImageReader()
readers.remove(engine);
readerMutex.unlock();
- quit();
- wait();
+ if (isRunning()) {
+ quit();
+ while (!wait(100)) {
+ // It is possible to for the quit to happen before exec()
+ // Need to wait until the event loop starts so that we
+ // can stop it. Particularly likely with an idle thread.
+ quit();
+ }
+ }
}
QDeclarativeImageReader *QDeclarativeImageReader::instance(QDeclarativeEngine *engine)
@@ -380,6 +388,7 @@ QDeclarativeImageReader *QDeclarativeImageReader::instance(QDeclarativeEngine *e
QDeclarativeImageReader *reader = readers.value(engine);
if (!reader) {
reader = new QDeclarativeImageReader(engine);
+ reader->started.wait(&readerMutex);
readers.insert(engine, reader);
}
readerMutex.unlock();
@@ -414,7 +423,10 @@ void QDeclarativeImageReader::cancel(QDeclarativePixmapReply *reply)
void QDeclarativeImageReader::run()
{
+ readerMutex.lock();
handler = new QDeclarativeImageRequestHandler(this, engine);
+ started.wakeAll();
+ readerMutex.unlock();
exec();