Commit 051eede1 authored by Max Kellermann's avatar Max Kellermann

db/upnp/Discovery: use monotonic clock instead of time()

parent 0696cac5
......@@ -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;
......
......@@ -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);
......
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