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 &);