diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-12-16 16:21:02 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-12-16 16:21:02 +0200 |
commit | a22595a7b0f47e5ce6ccc4d49bc7b2702d0a57e8 (patch) | |
tree | cadc69f3819d247bd24aaed15dcfc1103000d653 | |
parent | 65140e3e6012c8aac077f30cd722b12ab6c836d7 (diff) | |
download | qtlocation-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.cpp | 6 | ||||
-rw-r--r-- | platform/qt/src/http_file_source.hpp | 3 |
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; }; |