From e87fcb78cd3b7775c8da93014bce04ab5a32c439 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 14 Sep 2015 11:34:51 -0700 Subject: [PATCH] Add proper cleanup of AssetRequest in AssetResourceRequest --- .../networking/src/AssetResourceRequest.cpp | 21 +++++++++++++------ .../networking/src/AssetResourceRequest.h | 5 +++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/libraries/networking/src/AssetResourceRequest.cpp b/libraries/networking/src/AssetResourceRequest.cpp index ec6c4bec0d..c52381f30a 100644 --- a/libraries/networking/src/AssetResourceRequest.cpp +++ b/libraries/networking/src/AssetResourceRequest.cpp @@ -12,9 +12,14 @@ #include "AssetResourceRequest.h" #include "AssetClient.h" -#include "AssetRequest.h" #include "AssetUtils.h" +AssetResourceRequest::~AssetResourceRequest() { + if (_assetRequest) { + _assetRequest->deleteLater(); + } +} + void AssetResourceRequest::doSend() { // Make request to atp auto assetClient = DependencyManager::get(); @@ -31,9 +36,9 @@ void AssetResourceRequest::doSend() { return; } - auto request = assetClient->createRequest(hash, extension); + _assetRequest = assetClient->createRequest(hash, extension); - if (!request) { + if (!_assetRequest) { _result = ServerUnavailable; _state = Finished; @@ -42,9 +47,10 @@ void AssetResourceRequest::doSend() { return; } - connect(request, &AssetRequest::progress, this, &AssetResourceRequest::progress); - QObject::connect(request, &AssetRequest::finished, [this](AssetRequest* req) mutable { + connect(_assetRequest, &AssetRequest::progress, this, &AssetResourceRequest::progress); + QObject::connect(_assetRequest, &AssetRequest::finished, [this](AssetRequest* req) mutable { Q_ASSERT(_state == InProgress); + Q_ASSERT(req == _assetRequest); Q_ASSERT(req->getState() == AssetRequest::FINISHED); switch (req->getError()) { @@ -65,9 +71,12 @@ void AssetResourceRequest::doSend() { _state = Finished; emit finished(); + + _assetRequest->deleteLater(); + _assetRequest = nullptr; }); - request->start(); + _assetRequest->start(); } void AssetResourceRequest::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal) { diff --git a/libraries/networking/src/AssetResourceRequest.h b/libraries/networking/src/AssetResourceRequest.h index fb9c25e092..aee26a5d5a 100644 --- a/libraries/networking/src/AssetResourceRequest.h +++ b/libraries/networking/src/AssetResourceRequest.h @@ -14,18 +14,23 @@ #include +#include "AssetRequest.h" #include "ResourceRequest.h" class AssetResourceRequest : public ResourceRequest { Q_OBJECT public: AssetResourceRequest(QObject* parent, const QUrl& url) : ResourceRequest(parent, url) { } + ~AssetResourceRequest(); protected: virtual void doSend() override; private slots: void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); + +private: + AssetRequest* _assetRequest; }; #endif