From bdb82b6818efd050dc4081baf4607e5d99cb267a Mon Sep 17 00:00:00 2001 From: fourtf Date: Thu, 15 Aug 2019 20:38:11 +0200 Subject: [PATCH] fixed crash related to concurrent network request --- src/common/NetworkRequest.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/common/NetworkRequest.cpp b/src/common/NetworkRequest.cpp index dca08fa8..9d73cdff 100644 --- a/src/common/NetworkRequest.cpp +++ b/src/common/NetworkRequest.cpp @@ -4,10 +4,12 @@ #include "common/NetworkManager.hpp" #include "common/Outcome.hpp" #include "common/Version.hpp" +#include "debug/AssertInGuiThread.hpp" #include "debug/Log.hpp" #include "providers/twitch/TwitchCommon.hpp" #include "singletons/Paths.hpp" #include "util/DebugCount.hpp" +#include "util/PostToThread.hpp" #include #include @@ -315,13 +317,27 @@ void NetworkRequest::doRequest() // } // else // { - QObject::connect(reply, &QNetworkReply::finished, worker, - [handleReply, worker]() mutable { - handleReply(); - delete worker; - }); - // } + // auto + + QObject::connect( + reply, &QNetworkReply::finished, worker, + [data, handleReply, worker]() mutable { + if (data->executeConcurrently || isGuiThread()) + { + handleReply(); + + delete worker; + } + else + { + postToThread( + [worker, cb = std::move(handleReply)]() mutable { + cb(); + delete worker; + }); + } + }); }; QObject::connect(&requester, &NetworkRequester::requestUrl, worker,