diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 86b4b74de4..295af8c5ee 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -267,9 +267,10 @@ Resource::Resource(const QUrl& url, bool delayLoad) : Resource::~Resource() { if (_request) { - ResourceCache::requestCompleted(this); + _request->disconnect(this); _request->deleteLater(); _request = nullptr; + ResourceCache::requestCompleted(this); } } @@ -414,7 +415,14 @@ void Resource::handleDownloadProgress(uint64_t bytesReceived, uint64_t bytesTota } void Resource::handleReplyFinished() { - Q_ASSERT(_request); + Q_ASSERT_X(_request, "Resource::handleReplyFinished", "Request should not be null while in handleReplyFinished"); + + if (!_request || _request != sender()) { + // This can happen in the edge case that a request is timed out, but a `finished` signal is emitted before it is deleted. + qWarning(networking) << "Received signal Resource::handleReplyFinished from ResourceRequest that is not the current" + << " request: " << sender() << ", " << _request; + return; + } ResourceCache::requestCompleted(this);