// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
/** \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
eventTime_(0), eventEarly_(ClockService::milliseconds(11)), eventAdjust_(0)
{
if (epollFd_<0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
if (::pipe(sigpipe_) < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
int flags (::fcntl(sigpipe_[1],F_GETFL));
if (flags < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
flags |= O_NONBLOCK;
if (::fcntl(sigpipe_[1], F_SETFL, flags) < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
::epoll_event ev;
::memset(&ev, 0, sizeof(ev));
ev.events = EV_READ;
ev.data.fd = sigpipe_[0];
if (::epoll_ctl(epollFd_, EPOLL_CTL_ADD, sigpipe_[0], &ev) < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
}
prefix_ void senf::Scheduler::registerSignal(unsigned signal, SimpleCallback const & cb)
++ files_;
}
else
- throwErrno("::epoll_ctl()");
+ SENF_THROW_SYSTEM_EXCEPTION("::epoll_ctl()");
}
}
}
if (! file && epoll_ctl(epollFd_, action, fd, &ev) < 0)
- throwErrno("::epoll_ctl()");
+ SENF_THROW_SYSTEM_EXCEPTION("::epoll_ctl()");
if (file)
-- files_;
}
if (signal == SIGCHLD)
sa.sa_flags |= SA_NOCLDSTOP;
if (::sigaction(signal, &sa, 0) < 0)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
}
}
}
if (events<0)
if (errno != EINTR)
- throwErrno();
+ SENF_THROW_SYSTEM_EXCEPTION("");
eventTime_ = ClockService::now();