diff options
author | Warwick Allison <warwick.allison@nokia.com> | 2010-03-29 06:51:54 (GMT) |
---|---|---|
committer | Warwick Allison <warwick.allison@nokia.com> | 2010-03-29 06:51:54 (GMT) |
commit | bf2f5fbd01b49dad9a2bdfd20d1ccba03936bf88 (patch) | |
tree | 4849d88509b994c65fbb1737a778c09f5cce0cd3 /src/declarative/util/qdeclarativepixmapcache.cpp | |
parent | 49d56ab243a5f490495a79ce98276e2f33c03658 (diff) | |
parent | e993f05e5b927909978e355b0bdea4c1406acafb (diff) | |
download | Qt-bf2f5fbd01b49dad9a2bdfd20d1ccba03936bf88.zip Qt-bf2f5fbd01b49dad9a2bdfd20d1ccba03936bf88.tar.gz Qt-bf2f5fbd01b49dad9a2bdfd20d1ccba03936bf88.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-qml into 4.7
Diffstat (limited to 'src/declarative/util/qdeclarativepixmapcache.cpp')
-rw-r--r-- | src/declarative/util/qdeclarativepixmapcache.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
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(); |