From 691b078efc2e91378dfe97ceec7b748c570ddfe3 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 13 Mar 2015 18:33:07 +0100 Subject: [PATCH 1/2] Fix the timeout crash --- libraries/networking/src/ResourceCache.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 658f32aba1..4596ac5146 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -224,8 +224,12 @@ void Resource::refresh() { } if (_reply) { ResourceCache::requestCompleted(this); - delete _reply; + _reply->disconnect(this); + _replyTimer->disconnect(this); + _reply->deleteLater(); _reply = nullptr; + _replyTimer->deleteLater(); + _replyTimer = nullptr; } init(); _request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); @@ -296,9 +300,9 @@ void Resource::handleDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { return; } _reply->disconnect(this); + _replyTimer->disconnect(this); QNetworkReply* reply = _reply; _reply = nullptr; - _replyTimer->disconnect(this); _replyTimer->deleteLater(); _replyTimer = nullptr; ResourceCache::requestCompleted(this); @@ -369,9 +373,9 @@ void Resource::makeRequest() { void Resource::handleReplyError(QNetworkReply::NetworkError error, QDebug debug) { _reply->disconnect(this); + _replyTimer->disconnect(this); _reply->deleteLater(); _reply = nullptr; - _replyTimer->disconnect(this); _replyTimer->deleteLater(); _replyTimer = nullptr; ResourceCache::requestCompleted(this); From 405301f8617608c5a0376220186c96e7dc17d8eb Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 13 Mar 2015 20:24:52 +0100 Subject: [PATCH 2/2] Don't refresh if no lastModified tag in http request --- libraries/networking/src/ResourceCache.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 4596ac5146..dfb0d6c150 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -332,6 +332,10 @@ void Resource::maybeRefresh() { // We don't need to update, return return; } + } else if (!variant.isValid() || !variant.canConvert() || + !variant.value().isValid() || variant.value().isNull()) { + qDebug() << "Cannot determine when" << _url.fileName() << "was modified last, cached version might be outdated"; + return; } qDebug() << "Loaded" << _url.fileName() << "from the disk cache but the network version is newer, refreshing."; refresh(); @@ -355,10 +359,19 @@ void Resource::makeRequest() { } else { if (Q_LIKELY(NetworkAccessManager::getInstance().cache())) { QNetworkCacheMetaData metaData = NetworkAccessManager::getInstance().cache()->metaData(_url); + bool needUpdate = false; if (metaData.expirationDate().isNull() || metaData.expirationDate() <= QDateTime::currentDateTime()) { // If the expiration date is NULL or in the past, // put one far enough away that it won't be an issue. metaData.setExpirationDate(QDateTime::currentDateTime().addYears(100)); + needUpdate = true; + } + if (metaData.lastModified().isNull()) { + // If the lastModified date is NULL, set it to now. + metaData.setLastModified(QDateTime::currentDateTime()); + needUpdate = true; + } + if (needUpdate) { NetworkAccessManager::getInstance().cache()->updateMetaData(metaData); } }