From cd13c99d23979c731a447058cf126015a5e739c2 Mon Sep 17 00:00:00 2001 From: sbund <sbund@wiback.org> Date: Thu, 7 Sep 2006 08:31:39 +0000 Subject: [PATCH] Added some comments concerning future enhancements --- Scheduler/Scheduler.cc | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Scheduler/Scheduler.cc b/Scheduler/Scheduler.cc index 257e5f617..21885f24a 100644 --- a/Scheduler/Scheduler.cc +++ b/Scheduler/Scheduler.cc @@ -20,6 +20,48 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// TODO: Implement signal handling +// Here a basic concept of how to add signal support to the scheduler: +// +// Every signal to be reported by the scheduler will be asigned a +// generic signal handler by the scheduler. This signal handler will +// use longjmp (juck) to report this signal back to the scheduler +// main-loop. +// +// To make this safe, the main-loop will look something like: +// +// int signal = setjmp(jmpBuffer_); +// if (signal == 0) { +// // unblock all signals which are registered with the +// // scheduler +// // call epoll +// // block all relevant signals again +// } +// +// // now handle the event +// +// The signal handler is then simply defined as +// +// static void Scheduler::sigHandler(int signal) +// { +// // make sure to restore the signal handler here if +// // necessary +// longjmp(Scheduler::instance().jmpBuffer_,signal); +// } +// +// You should use sigaction to register the signal handlers and define +// a sa_mask so all Scheduler-registered signals are automatically +// *blocked* whenever one of the signals is called (including the +// called signal!). This ensures, that no two signals can be delivered +// on top of each other. And of course any signal registered with the +// scheduler must be blocked as soon as it is registered with the +// scheduler. + +// TODO: Multithreading support +// To support multithreading, the static member Scheduler::instance() +// must return a thread-local value (that is Scheduler::instance() +// must allocate one Scheduler instance per thread) + // Definition of non-inline non-template functions #include "Scheduler.hh" @@ -118,6 +160,7 @@ prefix_ void satcom::lib::Scheduler::process() struct epoll_event ev; int events = epoll_wait(epollFd_, &ev, 1, 1000); if (events<0) + // Hmm ... man epoll says, it will NOT return with EINTR ?? throw SystemException(errno); if (events==0) continue; -- GitLab