aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-01-18 16:26:11 +0100
committerMax Kellermann <max@duempel.org>2014-01-18 16:26:11 +0100
commit051eede1edda157f7354c9ad468e8884a8987979 (patch)
tree292b196b5cd09a3943542ec57d4aa240a4cc2fff /src
parent0696cac50bfc9430e5094112dc5019be70998012 (diff)
downloadmpd-051eede1edda157f7354c9ad468e8884a8987979.tar.gz
mpd-051eede1edda157f7354c9ad468e8884a8987979.tar.xz
mpd-051eede1edda157f7354c9ad468e8884a8987979.zip
db/upnp/Discovery: use monotonic clock instead of time()
Diffstat (limited to 'src')
-rw-r--r--src/db/upnp/Discovery.cxx7
-rw-r--r--src/db/upnp/Discovery.hxx21
2 files changed, 18 insertions, 10 deletions
diff --git a/src/db/upnp/Discovery.cxx b/src/db/upnp/Discovery.cxx
index 371f87244..f07751956 100644
--- a/src/db/upnp/Discovery.cxx
+++ b/src/db/upnp/Discovery.cxx
@@ -22,6 +22,7 @@
#include "Domain.hxx"
#include "ContentDirectoryService.hxx"
#include "upnpplib.hxx"
+#include "system/Clock.hxx"
#include "Log.hxx"
#include <upnp/upnptools.h>
@@ -74,7 +75,7 @@ UPnPDeviceDirectory::discoExplorer()
}
// Update or insert the device
- ContentDirectoryDescriptor d(time(0), tsk->expires);
+ ContentDirectoryDescriptor d(MonotonicClockS(), tsk->expires);
{
Error error2;
@@ -164,7 +165,7 @@ bool
UPnPDeviceDirectory::expireDevices(Error &error)
{
const ScopeLock protect(mutex);
- time_t now = time(0);
+ const unsigned now = MonotonicClockS();
bool didsomething = false;
for (auto it = directories.begin();
@@ -208,7 +209,7 @@ UPnPDeviceDirectory::Start(Error &error)
bool
UPnPDeviceDirectory::search(Error &error)
{
- time_t now = time(0);
+ const unsigned now = MonotonicClockS();
if (now - m_lastSearch < 10)
return true;
m_lastSearch = now;
diff --git a/src/db/upnp/Discovery.hxx b/src/db/upnp/Discovery.hxx
index d1df9f666..cda78cff5 100644
--- a/src/db/upnp/Discovery.hxx
+++ b/src/db/upnp/Discovery.hxx
@@ -31,8 +31,6 @@
#include <vector>
#include <string>
-#include <time.h>
-
class LibUPnP;
class ContentDirectoryService;
@@ -51,7 +49,7 @@ class UPnPDeviceDirectory {
struct DiscoveredTask {
std::string url;
std::string deviceId;
- int expires; // Seconds valid
+ unsigned expires; // Seconds valid
DiscoveredTask(const Upnp_Discovery *disco)
:url(disco->Location),
@@ -66,12 +64,18 @@ class UPnPDeviceDirectory {
class ContentDirectoryDescriptor {
public:
UPnPDevice device;
- time_t last_seen;
- int expires; // seconds valid
+
+ /**
+ * The MonotonicClockS() time stamp when this device
+ * was last seen alive.
+ */
+ unsigned last_seen;
+
+ unsigned expires; // seconds valid
ContentDirectoryDescriptor() = default;
- ContentDirectoryDescriptor(time_t last, int exp)
+ ContentDirectoryDescriptor(unsigned last, int exp)
:last_seen(last), expires(exp+20) {}
bool Parse(const std::string &url, const char *description,
@@ -93,7 +97,10 @@ class UPnPDeviceDirectory {
*/
int m_searchTimeout;
- time_t m_lastSearch;
+ /**
+ * The MonotonicClockS() time stamp of the last search.
+ */
+ unsigned m_lastSearch;
public:
UPnPDeviceDirectory(LibUPnP *_lib);