X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FScheduler%2FTimerSource.cc;h=c03002f285fabbd52b416761e5c65ed869f32646;hb=57daeae6f2e924ce3f16f9677c3474f531cba9e5;hp=df05438a7ff1e83a3ade6486c22903cf17771c28;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Scheduler/TimerSource.cc b/senf/Scheduler/TimerSource.cc index df05438..c03002f 100644 --- a/senf/Scheduler/TimerSource.cc +++ b/senf/Scheduler/TimerSource.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2009 +// Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -28,21 +28,22 @@ // Custom includes #include "IdleEvent.hh" -#ifdef HAVE_TIMERFD -#include +#ifdef HAVE_TIMERFD_CREATE +#include TIMERFD_H_PATH #endif +#include "senf/Utils/IgnoreValue.hh" //#include "TimerSource.mpp" #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::scheduler::detail::TimerSource prefix_ senf::scheduler::detail::TimerSource::~TimerSource() {} -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::scheduler::detail::POSIXTimerSource prefix_ senf::scheduler::detail::POSIXTimerSource::POSIXTimerSource() @@ -52,7 +53,7 @@ prefix_ senf::scheduler::detail::POSIXTimerSource::POSIXTimerSource() SENF_THROW_SYSTEM_EXCEPTION("pipe()"); senf::scheduler::detail::FdManager::instance().set( timerPipe_[0], detail::FdManager::EV_READ, this); - + sigemptyset(&sigSet_); sigaddset(&sigSet_, SIGALRM); sigprocmask(SIG_BLOCK, &sigSet_, 0); @@ -126,14 +127,17 @@ prefix_ void senf::scheduler::detail::POSIXTimerSource::sigHandler(int, if (siginfo->si_value.sival_ptr == 0) return; static char data = '\xD0'; - write(static_cast(siginfo->si_value.sival_ptr)->timerPipe_[1], - &data, sizeof(data)); + // If the write fails there's not much we can do anyways ... + senf::IGNORE( write(static_cast(siginfo->si_value.sival_ptr)->timerPipe_[1], + &data, sizeof(data)) ); } prefix_ void senf::scheduler::detail::POSIXTimerSource::signal(int events) { char data; - read(timerPipe_[0], &data, sizeof(data)); + // This should never fail since we are reading a single character from a signaled + // filedescriptor + senf::IGNORE( read(timerPipe_[0], &data, sizeof(data)) ); timeoutEnabled_ = false; } @@ -150,7 +154,7 @@ prefix_ void senf::scheduler::detail::POSIXTimerSource::reschedule() SENF_THROW_SYSTEM_EXCEPTION("timer_settime()"); } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::scheduler::detail::PollTimerSource prefix_ void senf::scheduler::detail::PollTimerSource::timeout(ClockService::clock_type timeout) @@ -171,10 +175,10 @@ prefix_ void senf::scheduler::detail::PollTimerSource::enable() prefix_ void senf::scheduler::detail::PollTimerSource::disable() {} -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::scheduler::detail::TimerFDTimerSource -#ifdef HAVE_TIMERFD +#ifdef HAVE_TIMERFD_CREATE prefix_ senf::scheduler::detail::TimerFDTimerSource::TimerFDTimerSource() : timerfd_ (-1), timeoutEnabled_ (false), timeout_ (0) { @@ -249,7 +253,8 @@ prefix_ bool senf::scheduler::detail::TimerFDTimerSource::haveTimerFD() prefix_ void senf::scheduler::detail::TimerFDTimerSource::signal(int events) { uint64_t expirations (0); - read(timerfd_, &expirations, sizeof(expirations)); + // We ignore the return value since we ignore the value read anyways + senf::IGNORE( read(timerfd_, &expirations, sizeof(expirations)) ); } prefix_ void senf::scheduler::detail::TimerFDTimerSource::reschedule() @@ -266,11 +271,11 @@ prefix_ void senf::scheduler::detail::TimerFDTimerSource::reschedule() } #endif -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ //#include "TimerSource.mpp" - + // Local Variables: // mode: c++ // fill-column: 100