X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FSignalDispatcher.hh;h=2c2b7ae56c412f7e26c99587fcc9ff4f23910a9f;hb=ee63e5771e9d69c7fe6de6c1b53b92d1307f2fc1;hp=b2c44a4dd2b7740862605c70e6eda172291c83c9;hpb=c6811d4b2fdd60eb33af627ae287dd228f435d14;p=senf.git diff --git a/Scheduler/SignalDispatcher.hh b/Scheduler/SignalDispatcher.hh index b2c44a4..2c2b7ae 100644 --- a/Scheduler/SignalDispatcher.hh +++ b/Scheduler/SignalDispatcher.hh @@ -38,7 +38,16 @@ namespace senf { namespace scheduler { - /** \brief + /** \brief Scheduler dispatcher managing UNIX signals + + This dispatcher supports registering UNIX signals with the Scheduler. + + \implementation SignalDispatcher provides a single signal handler which all registered + signals are assigned to. When a signal is received, data is written to a pipe which has + been added to the FdManager and this signals the event. + + \todo Add signal block/unblock management to the FdManager to reduce the number of + setprocmask() calls */ class SignalDispatcher : public FdManager::Event @@ -59,19 +68,27 @@ namespace scheduler { ///@} /////////////////////////////////////////////////////////////////////////// - void add(int signal, Callback const & cb); - void remove(int signal); + void add(int signal, Callback const & cb); ///< Add signal event + /**< \param[in] signal signal number + \param[in] cb Callback */ + + void remove(int signal); ///< Unregister signal event + + void unblockSignals(); ///< Unblock registered signals + /**< Must be called before waiting for an event */ + void blockSignals(); ///< Block registered signals + /**< Must be called directly after FdManager returns */ - void blockSignals(); - void unblockSignals(); + bool empty() const; ///< \c true, if no signal is registered. protected: private: + ///< Internal: UNIX signal event struct SignalEvent : public FIFORunner::TaskInfo { - explicit SignalEvent(Callback cb_); + SignalEvent(int signal, Callback cb_); virtual void run(); siginfo_t siginfo;