From 63d98b1b5c9a6ff9ae7e0bf89a55bbc6ee92c9a8 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 21 Apr 2016 12:12:04 -0700 Subject: [PATCH] Fix AssetRequest crash where signal was not disconnected --- libraries/networking/src/AssetClient.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index 0d640b4e80..8fb0001b57 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -32,7 +32,6 @@ MessageID AssetClient::_currentID = 0; AssetClient::AssetClient() { - setCustomDeleter([](Dependency* dependency){ static_cast(dependency)->deleteLater(); }); @@ -502,7 +501,18 @@ bool AssetClient::cancelGetAssetInfoRequest(MessageID id) { bool AssetClient::cancelGetAssetRequest(MessageID id) { // Search through each pending mapping request for id `id` for (auto& kv : _pendingRequests) { - if (kv.second.erase(id)) { + auto& messageCallbackMap = kv.second; + auto requestIt = messageCallbackMap.find(id); + if (requestIt != kv.second.end()) { + + auto& message = requestIt->second.message; + if (message) { + // disconnect from all signals emitting from the pending message + disconnect(message.data(), nullptr, this, nullptr); + } + + messageCallbackMap.erase(requestIt); + return true; } }