Merge pull request #7409 from huffman/fix-handle-reply-finished

Fix edge-case where resource can receive a signal after request deleted
This commit is contained in:
Andrew Meadows 2016-03-21 13:10:24 -07:00
commit f58a00f75a

View file

@ -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);