From 051eede1edda157f7354c9ad468e8884a8987979 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 18 Jan 2014 16:26:11 +0100 Subject: [PATCH] db/upnp/Discovery: use monotonic clock instead of time() --- src/db/upnp/Discovery.cxx | 7 ++++--- src/db/upnp/Discovery.hxx | 21 ++++++++++++++------- 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 @@ -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 #include -#include - 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);