{
SENF_ASSERT( !instance_ );
if (pipe(sigPipe_) <0)
- throw SystemException("pipe()");
+ SENF_THROW_SYSTEM_EXCEPTION("pipe()");
sigemptyset(&sigSet_);
instance_ = this;
manager_.set(sigPipe_[0], FdManager::EV_READ, this);
prefix_ senf::scheduler::SignalDispatcher::~SignalDispatcher()
{
- sigprocmask(SIG_UNBLOCK, & sigSet_, 0);
for (HandlerMap::iterator i (handlers_.begin()); i != handlers_.end(); ++i) {
::signal(i->first, SIG_DFL);
runner_.dequeue(&i->second);
}
+ sigprocmask(SIG_UNBLOCK, &sigSet_, 0);
manager_.remove(sigPipe_[0]);
close(sigPipe_[0]);
close(sigPipe_[1]);
return;
}
- i = handlers_.insert(std::make_pair(signal, SignalEvent(cb))).first;
+ i = handlers_.insert(std::make_pair(signal, SignalEvent(signal, cb))).first;
sigaddset(&sigSet_, signal);
runner_.enqueue(&i->second);
if (j->first == SIGCLD)
act.sa_flags |= SA_NOCLDSTOP;
if (sigaction(j->first, &act, 0) < 0)
- throw SystemException("sigaction()");
+ SENF_THROW_SYSTEM_EXCEPTION("sigaction()");
}
}