prefix_ void senf::scheduler::process()
{
- terminate_ = false;
- while(! terminate_ && ! (detail::FdDispatcher::instance().empty() &&
- detail::TimerDispatcher::instance().empty() &&
- detail::FileDispatcher::instance().empty())) {
+ try {
+ detail::FIFORunner::instance().startWatchdog();
detail::SignalDispatcher::instance().unblockSignals();
detail::TimerDispatcher::instance().unblockSignals();
- detail::FdManager::instance().processOnce();
+ terminate_ = false;
+ while(! terminate_ && ! (detail::FdDispatcher::instance().empty() &&
+ detail::TimerDispatcher::instance().empty() &&
+ detail::FileDispatcher::instance().empty())) {
+ detail::FdManager::instance().processOnce();
+ detail::FileDispatcher::instance().prepareRun();
+ detail::EventHookDispatcher::instance().prepareRun();
+ detail::FIFORunner::instance().run();
+ }
+ }
+ catch(...) {
detail::TimerDispatcher::instance().blockSignals();
detail::SignalDispatcher::instance().blockSignals();
- detail::FileDispatcher::instance().prepareRun();
- detail::EventEventDispatcher::instance().prepareRun();
- detail::FIFORunner::instance().run();
+ detail::FIFORunner::instance().stopWatchdog();
+ throw;
}
+ detail::TimerDispatcher::instance().blockSignals();
+ detail::SignalDispatcher::instance().blockSignals();
+ detail::FIFORunner::instance().stopWatchdog();
}
prefix_ void senf::scheduler::restart()
detail::TimerDispatcher* tdd (&detail::TimerDispatcher::instance());
detail::SignalDispatcher* sdd (&detail::SignalDispatcher::instance());
detail::FileDispatcher* fld (&detail::FileDispatcher::instance());
- detail::EventEventDispatcher* eed (&detail::EventEventDispatcher::instance());
+ detail::EventHookDispatcher* eed (&detail::EventHookDispatcher::instance());
- eed->~EventEventDispatcher();
+ eed->~EventHookDispatcher();
fld->~FileDispatcher();
sdd->~SignalDispatcher();
tdd->~TimerDispatcher();
new (tdd) detail::TimerDispatcher();
new (sdd) detail::SignalDispatcher();
new (fld) detail::FileDispatcher();
- new (eed) detail::EventEventDispatcher();
+ new (eed) detail::EventHookDispatcher();
}
prefix_ bool senf::scheduler::empty()
&& detail::TimerDispatcher::instance().empty()
&& detail::FileDispatcher::instance().empty()
&& detail::SignalDispatcher::instance().empty()
- && detail::EventEventDispatcher::instance().empty();
+ && detail::EventHookDispatcher::instance().empty();
}
///////////////////////////////////////////////////////////////////////////