Cleanup: Remove TAB chars and std::cerr debug output
[senf.git] / Scheduler / TimerSource.cc
index ac1baa3..df05438 100644 (file)
@@ -27,7 +27,7 @@
 //#include "TimerSource.ih"
 
 // Custom includes
-#include "FdEvent.hh"
+#include "IdleEvent.hh"
 #ifdef HAVE_TIMERFD
 #include <sys/timerfd.h>
 #endif
@@ -157,12 +157,12 @@ prefix_ void senf::scheduler::detail::PollTimerSource::timeout(ClockService::clo
 {
     ClockService::clock_type now (ClockService::now());
     int delay (ClockService::in_milliseconds(timeout-now)+1);
-    FileDispatcher::instance().timeout(delay<0?0:delay);
+    IdleEventDispatcher::instance().timeout(delay<0?0:delay);
 }
 
 prefix_ void senf::scheduler::detail::PollTimerSource::notimeout()
 {
-    FileDispatcher::instance().timeout(-1);
+    IdleEventDispatcher::instance().timeout(-1);
 }
 
 prefix_ void senf::scheduler::detail::PollTimerSource::enable()
@@ -217,6 +217,35 @@ prefix_ void senf::scheduler::detail::TimerFDTimerSource::enable()
 prefix_ void senf::scheduler::detail::TimerFDTimerSource::disable()
 {}
 
+namespace {
+
+    struct TimerFdCheck
+    {
+        TimerFdCheck();
+        bool timerFdOk;
+    };
+
+    TimerFdCheck::TimerFdCheck()
+        : timerFdOk (false)
+    {
+        int fd (timerfd_create(CLOCK_MONOTONIC, 0));
+        if (fd == -1) {
+            if (errno != EINVAL)
+                SENF_THROW_SYSTEM_EXCEPTION("timerfd_create()");
+        }
+        else {
+            timerFdOk = true;
+            close(fd);
+        }
+    }
+
+}
+prefix_ bool senf::scheduler::detail::TimerFDTimerSource::haveTimerFD()
+{
+    static TimerFdCheck check;
+    return check.timerFdOk;
+}
+
 prefix_ void senf::scheduler::detail::TimerFDTimerSource::signal(int events)
 {
     uint64_t expirations (0);
@@ -232,7 +261,7 @@ prefix_ void senf::scheduler::detail::TimerFDTimerSource::reschedule()
         timer.it_value.tv_nsec = ClockService::in_nanoseconds(
             timeout_ - ClockService::seconds(timer.it_value.tv_sec));
     }
-    if (timerfd_settime(timerfd_, TIMER_ABSTIME, &timer, 0)<0)
+    if (timerfd_settime(timerfd_, TFD_TIMER_ABSTIME, &timer, 0)<0)
         SENF_THROW_SYSTEM_EXCEPTION("timerfd_settime()");
 }
 #endif