Fix 'compiled' check in SConstruct
[senf.git] / Scheduler / Scheduler.cc
index 62a5dfe..fbc917d 100644 (file)
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-// TODO: Implement signal handling
+/** \file
+
+    \idea Implement signal handling (See source for more discussion
+    about this) 
+
+    \idea 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)
+ */
+
 // 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
 // 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)
+// called signal!) (This also means, we will have to re-register all
+// signals if we change the registration of some signal since the
+// sa_mask changes). 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.
 
 // Definition of non-inline non-template functions
 
@@ -204,6 +211,10 @@ prefix_ void senf::Scheduler::process()
            if (spec.cb_hup)
                spec.cb_hup(EV_HUP);
            else if (ev.events & EPOLLERR) {
+               /// \fixme This is stupid, if cb_write and cb_read are
+               /// the same. The same below. We really have to
+               /// exactly define sane semantics of what to do on
+               /// EPOLLHUP and EPOLLERR.
                if (spec.cb_write) spec.cb_write(EV_HUP);
                if (spec.cb_read) spec.cb_read(EV_HUP);
            }