zeroconf/AvahiPoll: the struct timeval is an absolute time point
Fixes broken libavahi-client timeouts.
This commit is contained in:
parent
bce144a232
commit
7a6823dcdf
|
@ -105,8 +105,28 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
[[gnu::pure]]
|
||||||
|
Event::Duration AbsoluteToDuration(const struct timeval &tv) noexcept {
|
||||||
|
if (tv.tv_sec == 0)
|
||||||
|
/* schedule immediately */
|
||||||
|
return {};
|
||||||
|
|
||||||
|
struct timeval now;
|
||||||
|
if (gettimeofday(&now, nullptr) < 0)
|
||||||
|
/* shouldn't ever fail, but if it does, do
|
||||||
|
something reasonable */
|
||||||
|
return std::chrono::seconds(1);
|
||||||
|
|
||||||
|
auto d = ToSteadyClockDuration(tv)
|
||||||
|
- ToSteadyClockDuration(now);
|
||||||
|
if (d.count() < 0)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
void Schedule(const struct timeval &tv) noexcept {
|
void Schedule(const struct timeval &tv) noexcept {
|
||||||
event.Schedule(ToSteadyClockDuration(tv));
|
event.Schedule(AbsoluteToDuration(tv));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnTimeout() noexcept {
|
void OnTimeout() noexcept {
|
||||||
|
|
Loading…
Reference in New Issue