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

This commit is contained in:
Max Kellermann 2014-01-18 16:26:11 +01:00
parent 0696cac50b
commit 051eede1ed
2 changed files with 18 additions and 10 deletions

View File

@ -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;

View File

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