From cec6d01d17e39af6e8a139156a3b51fd45558a50 Mon Sep 17 00:00:00 2001
From: Aaron Kennedy <aaron.kennedy@nokia.com>
Date: Thu, 8 Jul 2010 15:04:48 +1000
Subject: Don't double delete cancelled pixmap cache requests

QTBUG-11954
---
 src/declarative/util/qdeclarativepixmapcache.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp
index 3f496b3..f729ced 100644
--- a/src/declarative/util/qdeclarativepixmapcache.cpp
+++ b/src/declarative/util/qdeclarativepixmapcache.cpp
@@ -358,7 +358,9 @@ void QDeclarativePixmapReader::networkRequestDone()
             }
         }
         // send completion event to the QDeclarativePixmapReply
-        job->postReply(error, errorString, readSize, image);
+        mutex.lock();
+        if (!cancelled.contains(job)) job->postReply(error, errorString, readSize, image);
+        mutex.unlock();
     }
     reply->deleteLater();
 
@@ -438,7 +440,9 @@ void QDeclarativePixmapReader::processJob(QDeclarativePixmapReply *runningJob)
             errorStr = QDeclarativePixmap::tr("Failed to get image from provider: %1").arg(url.toString());
         }
 
-        runningJob->postReply(errorCode, errorStr, readSize, image);
+        mutex.lock();
+        if (!cancelled.contains(runningJob)) runningJob->postReply(errorCode, errorStr, readSize, image);
+        mutex.unlock();
     } else {
         QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url);
         if (!lf.isEmpty()) {
@@ -455,7 +459,9 @@ void QDeclarativePixmapReader::processJob(QDeclarativePixmapReply *runningJob)
                 errorStr = QDeclarativePixmap::tr("Cannot open: %1").arg(url.toString());
                 errorCode = QDeclarativePixmapReply::Loading;
             }
-            runningJob->postReply(errorCode, errorStr, readSize, image);
+            mutex.lock();
+            if (!cancelled.contains(runningJob)) runningJob->postReply(errorCode, errorStr, readSize, image);
+            mutex.unlock();
         } else {
             // Network resource
             QNetworkRequest req(url);
-- 
cgit v0.12