X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FScheduler.cc;h=f7509bcb28f4999f1a4b7dd5ff0de250a4048751;hb=2d51a34f79dd18b23c54172444b2cc7433b8f5f0;hp=3047ab4fb5e62de0bba9543ca6aae54db250e250;hpb=f4e0d3d4a32cc0bfc37855ad7f2c1e829911d233;p=senf.git diff --git a/Scheduler/Scheduler.cc b/Scheduler/Scheduler.cc index 3047ab4..f7509bc 100644 --- a/Scheduler/Scheduler.cc +++ b/Scheduler/Scheduler.cc @@ -21,6 +21,7 @@ // 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) @@ -28,7 +29,9 @@ \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) + 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: @@ -62,12 +65,12 @@ // 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" @@ -209,6 +212,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); }