// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file
+ \brief Scheduler non-inline non-template implementation
\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)
-
- \fixme Test2
+ instance per thread). Another possibility would be to distribute
+ the async load unto several threads (one scheduler for multiple
+ threads)
*/
// Here a basic concept of how to add signal support to the scheduler:
// 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.
-
-// Definition of non-inline non-template functions
+// 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.
#include "Scheduler.hh"
//#include "Scheduler.ih"
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);
}