Commit e5ee3579 authored by Max Kellermann's avatar Max Kellermann

lib/upnp/Discovery: use DeferredMonitor instead of BlockingCall()

parent 8aef518c
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
#include "ContentDirectoryService.hxx" #include "ContentDirectoryService.hxx"
#include "Log.hxx" #include "Log.hxx"
#include "lib/curl/Global.hxx" #include "lib/curl/Global.hxx"
#include "event/Call.hxx"
#include "util/DeleteDisposer.hxx" #include "util/DeleteDisposer.hxx"
#include "util/ScopeExit.hxx" #include "util/ScopeExit.hxx"
#include "util/RuntimeError.hxx" #include "util/RuntimeError.hxx"
...@@ -34,7 +33,7 @@ ...@@ -34,7 +33,7 @@
UPnPDeviceDirectory::Downloader::Downloader(UPnPDeviceDirectory &_parent, UPnPDeviceDirectory::Downloader::Downloader(UPnPDeviceDirectory &_parent,
const Upnp_Discovery &disco) const Upnp_Discovery &disco)
:parent(_parent), :DeferredMonitor(_parent.GetEventLoop()), parent(_parent),
id(disco.DeviceId), url(disco.Location), id(disco.DeviceId), url(disco.Location),
expires(std::chrono::seconds(disco.Expires)), expires(std::chrono::seconds(disco.Expires)),
request(*parent.curl, url.c_str(), *this) request(*parent.curl, url.c_str(), *this)
...@@ -43,20 +42,16 @@ UPnPDeviceDirectory::Downloader::Downloader(UPnPDeviceDirectory &_parent, ...@@ -43,20 +42,16 @@ UPnPDeviceDirectory::Downloader::Downloader(UPnPDeviceDirectory &_parent,
} }
void void
UPnPDeviceDirectory::Downloader::Start() UPnPDeviceDirectory::Downloader::Destroy()
{ {
auto &event_loop = parent.GetEventLoop(); parent.downloaders.erase_and_dispose(parent.downloaders.iterator_to(*this),
DeleteDisposer());
BlockingCall(event_loop, [this](){
request.Start();
});
} }
void void
UPnPDeviceDirectory::Downloader::Destroy() UPnPDeviceDirectory::Downloader::RunDeferred()
{ {
parent.downloaders.erase_and_dispose(parent.downloaders.iterator_to(*this), request.Start();
DeleteDisposer());
} }
void void
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "lib/curl/Handler.hxx" #include "lib/curl/Handler.hxx"
#include "lib/curl/Request.hxx" #include "lib/curl/Request.hxx"
#include "thread/Mutex.hxx" #include "thread/Mutex.hxx"
#include "event/DeferredMonitor.hxx"
#include "Compiler.h" #include "Compiler.h"
#include <upnp/upnp.h> #include <upnp/upnp.h>
...@@ -83,7 +84,7 @@ class UPnPDeviceDirectory final : UpnpCallback { ...@@ -83,7 +84,7 @@ class UPnPDeviceDirectory final : UpnpCallback {
class Downloader final class Downloader final
: public boost::intrusive::list_base_hook<boost::intrusive::link_mode<boost::intrusive::normal_link>>, : public boost::intrusive::list_base_hook<boost::intrusive::link_mode<boost::intrusive::normal_link>>,
CurlResponseHandler { DeferredMonitor, CurlResponseHandler {
UPnPDeviceDirectory &parent; UPnPDeviceDirectory &parent;
...@@ -99,10 +100,16 @@ class UPnPDeviceDirectory final : UpnpCallback { ...@@ -99,10 +100,16 @@ class UPnPDeviceDirectory final : UpnpCallback {
Downloader(UPnPDeviceDirectory &_parent, Downloader(UPnPDeviceDirectory &_parent,
const Upnp_Discovery &disco); const Upnp_Discovery &disco);
void Start(); void Start() {
DeferredMonitor::Schedule();
}
void Destroy(); void Destroy();
private: private:
/* virtual methods from DeferredMonitor */
void RunDeferred() override;
/* virtual methods from CurlResponseHandler */ /* virtual methods from CurlResponseHandler */
void OnHeaders(unsigned status, void OnHeaders(unsigned status,
std::multimap<std::string, std::string> &&headers) override; std::multimap<std::string, std::string> &&headers) override;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment