Incorporate changes from Dasynq upstream.
[oweals/dinit.git] / src / dasynq / dasynq-timerfd.h
index e660efe71ed02aa3ebd307ef49057e7ffeaa1c03..d92ab0f090febf2db7949d1983a9f61cf7b9a6ef 100644 (file)
@@ -62,9 +62,12 @@ template <class Base> class TimerFdEvents : public timer_base<Base>
         set_timer_from_queue(fd, queue);
     }
 
-    void setTimer(timer_handle_t & timer_id, struct timespec &timeout, struct timespec &interval,
+    void setTimer(timer_handle_t & timer_id, const time_val &timeouttv, const time_val &intervaltv,
             timer_queue_t &queue, int fd, bool enable) noexcept
     {
+        timespec timeout = timeouttv;
+        timespec interval = intervaltv;
+
         std::lock_guard<decltype(Base::lock)> guard(Base::lock);
 
         auto &ts = queue.node_data(timer_id);
@@ -175,9 +178,12 @@ template <class Base> class TimerFdEvents : public timer_base<Base>
 
     // starts (if not started) a timer to timeout at the given time. Resets the expiry count to 0.
     //   enable: specifies whether to enable reporting of timeouts/intervals
-    void setTimer(timer_handle_t & timer_id, struct timespec &timeout, struct timespec &interval,
+    void setTimer(timer_handle_t & timer_id, const time_val &timeouttv, const time_val &intervaltv,
             bool enable, clock_type clock = clock_type::MONOTONIC) noexcept
     {
+        timespec timeout = timeouttv;
+        timespec interval = intervaltv;
+
         switch (clock) {
         case clock_type::SYSTEM:
             setTimer(timer_id, timeout, interval, wallclock_queue, systemtime_fd, enable);
@@ -191,9 +197,12 @@ template <class Base> class TimerFdEvents : public timer_base<Base>
     }
 
     // Set timer relative to current time:    
-    void setTimerRel(timer_handle_t & timer_id, struct timespec &timeout, struct timespec &interval,
+    void setTimerRel(timer_handle_t & timer_id, const time_val &timeouttv, const time_val &intervaltv,
             bool enable, clock_type clock = clock_type::MONOTONIC) noexcept
     {
+        timespec timeout = timeouttv;
+        timespec interval = intervaltv;
+
         clockid_t sclock;
         switch (clock) {
         case clock_type::SYSTEM:
@@ -241,6 +250,19 @@ template <class Base> class TimerFdEvents : public timer_base<Base>
         }
     }
 
+    void get_time(time_val &tv, clock_type clock, bool force_update) noexcept
+    {
+        timespec ts;
+        get_time(ts, clock, force_update);
+        tv = ts;
+    }
+
+    void get_time(timespec &ts, clock_type clock, bool force_update) noexcept
+    {
+        int posix_clock_id = (clock == clock_type::MONOTONIC) ? CLOCK_MONOTONIC : CLOCK_REALTIME;
+        clock_gettime(posix_clock_id, &ts);
+    }
+
     ~TimerFdEvents()
     {
         close(timerfd_fd);