From a73c77bf00f1d9e1efbc7214e7463f063a3e0656 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Mon, 12 Aug 2019 16:52:09 -0400 Subject: [PATCH] upnp: fix C3853 with microsoft compiler Change-Id: I6da65c9b61ea0def790710cb55120c0dab632fda --- src/upnp/protocol/pupnp/pupnp.cpp | 12 ++++++------ src/upnp/protocol/pupnp/pupnp.h | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/upnp/protocol/pupnp/pupnp.cpp b/src/upnp/protocol/pupnp/pupnp.cpp index 184d9ef66b..7652c2e3cb 100644 --- a/src/upnp/protocol/pupnp/pupnp.cpp +++ b/src/upnp/protocol/pupnp/pupnp.cpp @@ -176,8 +176,8 @@ PUPnP::PUPnP() // Handle successful downloads for (auto& item : finished) { auto result = item.get(); - if (not result.document or not validateIgd(result)) { - cpDeviceList_.erase(result.location); + if (not result->document or not validateIgd(*result)) { + cpDeviceList_.erase(result->location); } } } @@ -449,7 +449,7 @@ PUPnP::handleCtrlPtUPnPEvents(Upnp_EventType event_type, const void* event) // Check if we already downloaded the xml doc based on the igd location string. std::string igdLocationUrl {UpnpDiscovery_get_Location_cstr(d_event)}; - dwnldlXmlList_.emplace_back(dht::ThreadPool::io().get<IGDInfo>([this, location = std::move(igdLocationUrl)]{ + dwnldlXmlList_.emplace_back(dht::ThreadPool::io().get<pIGDInfo>([this, location = std::move(igdLocationUrl)]{ IXML_Document* doc_container_ptr = nullptr; XMLDocument doc_desc_ptr(nullptr, ixmlDocument_free); int upnp_err = UpnpDownloadXmlDoc(location.c_str(), &doc_container_ptr); @@ -459,8 +459,8 @@ PUPnP::handleCtrlPtUPnPEvents(Upnp_EventType event_type, const void* event) if (upnp_err != UPNP_E_SUCCESS or not doc_desc_ptr) JAMI_WARN("PUPnP: Error downloading device XML document -> %s", UpnpGetErrorMessage(upnp_err)); else - return IGDInfo {std::move(location), std::move(doc_desc_ptr)}; - return IGDInfo {std::move(location), XMLDocument(nullptr, ixmlDocument_free)}; + return std::make_unique<IGDInfo>(IGDInfo{ std::move(location), std::move(doc_desc_ptr) }); + return std::make_unique<IGDInfo>(IGDInfo{ std::move(location), XMLDocument(nullptr, ixmlDocument_free) }); })); break; @@ -925,4 +925,4 @@ PUPnP::actionAddPortMapping(const UPnPIGD& igd, const Mapping& mapping, UPnPProt return true; } -}} // namespace jami::upnp \ No newline at end of file +}} // namespace jami::upnp diff --git a/src/upnp/protocol/pupnp/pupnp.h b/src/upnp/protocol/pupnp/pupnp.h index ca76786f22..2d2a95024b 100644 --- a/src/upnp/protocol/pupnp/pupnp.h +++ b/src/upnp/protocol/pupnp/pupnp.h @@ -79,6 +79,7 @@ public: std::string location; XMLDocument document; }; + using pIGDInfo = std::unique_ptr<IGDInfo>; PUPnP(); ~PUPnP(); @@ -146,7 +147,7 @@ private: std::map<std::string, std::shared_ptr<IGD>> validIgdList_; // Map of valid IGDs with their UDN (universal Id). std::set<std::string> cpDeviceList_; // Control point device list containing the device ID and device subscription event url. - std::list<std::future<IGDInfo>> dwnldlXmlList_; // List of shared_futures for blocking xml download function calls. + std::list<std::future<pIGDInfo>> dwnldlXmlList_; // List of shared_futures for blocking xml download function calls. std::mutex ctrlptMutex_; // Mutex for client handle protection. UpnpClient_Handle ctrlptHandle_ {-1}; // Control point handle. -- GitLab