From 1a09003a6e8fc5ae3b1e4b01ae8432b0ed3ca7bd Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 16 Jan 2014 09:03:41 +0100 Subject: [PATCH] db/upnp: move the UPnPDeviceDirectory instance to class UpnpDatabase Delete the object when closing the database. --- src/db/UpnpDatabasePlugin.cxx | 10 ++++++---- src/db/upnp/Discovery.cxx | 11 ----------- src/db/upnp/Discovery.hxx | 6 ++---- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/db/UpnpDatabasePlugin.cxx b/src/db/UpnpDatabasePlugin.cxx index 5381b30a9..3c2ca72ff 100644 --- a/src/db/UpnpDatabasePlugin.cxx +++ b/src/db/UpnpDatabasePlugin.cxx @@ -163,9 +163,10 @@ UpnpDatabase::Open(Error &error) if (!m_lib) return false; - m_superdir = UPnPDeviceDirectory::getTheDir(); - if (!m_superdir || !m_superdir->ok()) { - error.Set(upnp_domain, "Discovery services startup failed"); + m_superdir = new UPnPDeviceDirectory(); + if (!m_superdir->ok()) { + error.Set(m_superdir->GetError()); + delete m_superdir; return false; } @@ -180,7 +181,8 @@ void UpnpDatabase::Close() { delete m_root; - // TBD decide what we do with the lib and superdir objects + delete m_superdir; + // TBD decide what we do with the lib object } void diff --git a/src/db/upnp/Discovery.cxx b/src/db/upnp/Discovery.cxx index 89f01df2a..97b57c89c 100644 --- a/src/db/upnp/Discovery.cxx +++ b/src/db/upnp/Discovery.cxx @@ -275,17 +275,6 @@ UPnPDeviceDirectory::search() return true; } -UPnPDeviceDirectory *UPnPDeviceDirectory::getTheDir() -{ - // TODO: elimate static variable - static UPnPDeviceDirectory *theDevDir; - if (theDevDir == nullptr) - theDevDir = new UPnPDeviceDirectory(); - if (theDevDir && !theDevDir->ok()) - return 0; - return theDevDir; -} - bool UPnPDeviceDirectory::getDirServices(std::vector &out) { diff --git a/src/db/upnp/Discovery.hxx b/src/db/upnp/Discovery.hxx index 899ac83ab..ddc7d2909 100644 --- a/src/db/upnp/Discovery.hxx +++ b/src/db/upnp/Discovery.hxx @@ -46,14 +46,12 @@ class UPnPDeviceDirectory { time_t m_lastSearch; - UPnPDeviceDirectory(); public: + UPnPDeviceDirectory(); + UPnPDeviceDirectory(const UPnPDeviceDirectory &) = delete; UPnPDeviceDirectory& operator=(const UPnPDeviceDirectory &) = delete; - /** This class is a singleton. Get the instance here */ - static UPnPDeviceDirectory *getTheDir(); - /** Retrieve the directory services currently seen on the network */ bool getDirServices(std::vector &);