summaryrefslogtreecommitdiffstats
path: root/src/declarative/util/qdeclarativepixmapcache.cpp
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2010-06-30 01:47:14 (GMT)
committerMartin Jones <martin.jones@nokia.com>2010-06-30 01:47:14 (GMT)
commit966fe022d5b4a9f108138c0b0889d07d46f8e0ca (patch)
tree7896fd5efba1094f6fba4c48c4ccd6fa32a7b069 /src/declarative/util/qdeclarativepixmapcache.cpp
parent4c0abb14712abe6d64338e74164e09ddd2f246f2 (diff)
downloadQt-966fe022d5b4a9f108138c0b0889d07d46f8e0ca.zip
Qt-966fe022d5b4a9f108138c0b0889d07d46f8e0ca.tar.gz
Qt-966fe022d5b4a9f108138c0b0889d07d46f8e0ca.tar.bz2
Plug QdeclarativePixmapCache canceled request leak.
Task-number: QTBUG-11827
Diffstat (limited to 'src/declarative/util/qdeclarativepixmapcache.cpp')
-rw-r--r--src/declarative/util/qdeclarativepixmapcache.cpp56
1 files changed, 29 insertions, 27 deletions
diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp
index 0a14462..0c2f23d 100644
--- a/src/declarative/util/qdeclarativepixmapcache.cpp
+++ b/src/declarative/util/qdeclarativepixmapcache.cpp
@@ -220,18 +220,20 @@ bool QDeclarativeImageRequestHandler::event(QEvent *event)
if (reader->cancelled.count()) {
for (int i = 0; i < reader->cancelled.count(); ++i) {
QDeclarativePixmapReply *job = reader->cancelled.at(i);
- // cancel any jobs already started
QNetworkReply *reply = replies.key(job, 0);
if (reply && reply->isRunning()) {
+ // cancel any jobs already started
replies.remove(reply);
reply->close();
- }
- // remove from pending job list
- for (int j = 0; j < reader->jobs.count(); ++j) {
- if (reader->jobs.at(j) == job) {
- reader->jobs.removeAt(j);
- job->release(true);
- break;
+ job->release(true);
+ } else {
+ // remove from pending job list
+ for (int j = 0; j < reader->jobs.count(); ++j) {
+ if (reader->jobs.at(j) == job) {
+ reader->jobs.removeAt(j);
+ job->release(true);
+ break;
+ }
}
}
}
@@ -306,27 +308,27 @@ void QDeclarativeImageRequestHandler::networkRequestDone()
QNetworkReply *reply = static_cast<QNetworkReply *>(sender());
QDeclarativePixmapReply *job = replies.take(reply);
- redirectCount++;
- if (redirectCount < IMAGEREQUESTHANDLER_MAX_REDIRECT_RECURSION) {
- QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
- if (redirect.isValid()) {
- QUrl url = reply->url().resolved(redirect.toUrl());
- QNetworkRequest req(url);
- req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
-
- reply->deleteLater();
- reply = networkAccessManager()->get(req);
-
- QMetaObject::connect(reply, replyDownloadProgress, job, downloadProgress);
- QMetaObject::connect(reply, replyFinished, this, thisNetworkRequestDone);
-
- replies.insert(reply, job);
- return;
+ if (job) {
+ redirectCount++;
+ if (redirectCount < IMAGEREQUESTHANDLER_MAX_REDIRECT_RECURSION) {
+ QVariant redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
+ if (redirect.isValid()) {
+ QUrl url = reply->url().resolved(redirect.toUrl());
+ QNetworkRequest req(url);
+ req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
+
+ reply->deleteLater();
+ reply = networkAccessManager()->get(req);
+
+ QMetaObject::connect(reply, replyDownloadProgress, job, downloadProgress);
+ QMetaObject::connect(reply, replyFinished, this, thisNetworkRequestDone);
+
+ replies.insert(reply, job);
+ return;
+ }
}
- }
- redirectCount=0;
+ redirectCount=0;
- if (job) {
QImage image;
QDeclarativeImageReaderEvent::ReadError error;
QString errorString;