summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-12-16 16:21:02 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-12-16 16:21:02 +0200
commita22595a7b0f47e5ce6ccc4d49bc7b2702d0a57e8 (patch)
treecadc69f3819d247bd24aaed15dcfc1103000d653
parent65140e3e6012c8aac077f30cd722b12ab6c836d7 (diff)
downloadqtlocation-mapboxgl-upstream/mikhail_qt_fix_filesource_crash.tar.gz
[qt] Fix usage of QNetworkReply after deletionupstream/mikhail_qt_fix_filesource_crash
-rw-r--r--platform/qt/src/http_file_source.cpp6
-rw-r--r--platform/qt/src/http_file_source.hpp3
2 files changed, 5 insertions, 4 deletions
diff --git a/platform/qt/src/http_file_source.cpp b/platform/qt/src/http_file_source.cpp
index b8553a5a55..e4d89e3d64 100644
--- a/platform/qt/src/http_file_source.cpp
+++ b/platform/qt/src/http_file_source.cpp
@@ -20,7 +20,7 @@ void HTTPFileSource::Impl::request(HTTPRequest* req)
{
QUrl url = req->requestUrl();
- QPair<QNetworkReply*, QVector<HTTPRequest*>>& data = m_pending[url];
+ QPair<QPointer<QNetworkReply>, QVector<HTTPRequest*>>& data = m_pending[url];
QVector<HTTPRequest*>& requestsVector = data.second;
requestsVector.append(req);
@@ -45,7 +45,7 @@ void HTTPFileSource::Impl::cancel(HTTPRequest* req)
return;
}
- QPair<QNetworkReply*, QVector<HTTPRequest*>>& data = it.value();
+ QPair<QPointer<QNetworkReply>, QVector<HTTPRequest*>>& data = it.value();
QNetworkReply* reply = data.first;
QVector<HTTPRequest*>& requestsVector = data.second;
@@ -58,7 +58,7 @@ void HTTPFileSource::Impl::cancel(HTTPRequest* req)
if (requestsVector.empty()) {
m_pending.erase(it);
- reply->abort();
+ if (reply) reply->abort();
}
}
diff --git a/platform/qt/src/http_file_source.hpp b/platform/qt/src/http_file_source.hpp
index 4ba61b70da..e9c67a7fc8 100644
--- a/platform/qt/src/http_file_source.hpp
+++ b/platform/qt/src/http_file_source.hpp
@@ -7,6 +7,7 @@
#include <QNetworkAccessManager>
#include <QObject>
#include <QPair>
+#include <QPointer>
#include <QQueue>
#include <QUrl>
#include <QVector>
@@ -30,7 +31,7 @@ public slots:
void onReplyFinished();
private:
- QMap<QUrl, QPair<QNetworkReply *, QVector<HTTPRequest *>>> m_pending;
+ QMap<QUrl, QPair<QPointer<QNetworkReply>, QVector<HTTPRequest *>>> m_pending;
QNetworkAccessManager *m_manager;
};