X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FDaemon%2FDaemon.cc;h=6bd84ae4c785d4f434d998ce11b91198ac00fc22;hb=d01f65dcdbb7c26ae07dbcbeca753118d7460225;hp=b04eef7d40e457b469036e0a7bc0d2f942738891;hpb=03516e8371a90f908ce54dedb3c874eec7dd08ff;p=senf.git diff --git a/Utils/Daemon/Daemon.cc b/Utils/Daemon/Daemon.cc index b04eef7..6bd84ae 100644 --- a/Utils/Daemon/Daemon.cc +++ b/Utils/Daemon/Daemon.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -88,7 +89,7 @@ prefix_ int senf::Daemon::argc() return argc_; } -prefix_ char ** senf::Daemon::argv() +prefix_ char const ** senf::Daemon::argv() { return argv_; } @@ -106,7 +107,7 @@ namespace { prefix_ void senf::Daemon::removeDaemonArgs() { - char ** last (std::remove_if(argv_+1, argv_+argc_, IsDaemonOpt())); + char const ** last (std::remove_if(argv_+1, argv_+argc_, IsDaemonOpt())); *last = 0; argc_ = last - argv_; } @@ -237,7 +238,7 @@ prefix_ void senf::Daemon::exit(unsigned code) throw DaemonExitException(code); } -prefix_ int senf::Daemon::start(int argc, char ** argv) +prefix_ int senf::Daemon::start(int argc, char const ** argv) { argc_ = argc; argv_ = argv; @@ -363,6 +364,15 @@ prefix_ void senf::Daemon::fork() ::sigemptyset(&cldsig); LIBC_CALL( ::sigaddset, (&cldsig, SIGCHLD) ); LIBC_CALL( ::sigprocmask, (SIG_BLOCK, &cldsig, &oldsig) ); + + if (! senf::scheduler::empty() ) + std::cerr << + "\n" + "*** WARNING ***\n" + "Scheduler not empty before fork(). THIS MUST NOT HAPPEN.\n" + "The scheduler will be reinitialized by the fork() and lose all registrations.\n" + "*** WARNING ***\n" + "\n"; LIBC_CALL_RV( pid, ::fork, () ); @@ -378,7 +388,7 @@ prefix_ void senf::Daemon::fork() LIBC_CALL( ::setsid, () ); LIBC_CALL( ::sigprocmask, (SIG_SETMASK, &oldsig, 0) ); - senf::Scheduler::instance().restart(); + senf::scheduler::restart(); return; } @@ -388,7 +398,7 @@ prefix_ void senf::Daemon::fork() LIBC_CALL( ::close, (coutpipe[1]) ); LIBC_CALL( ::close, (cerrpipe[1]) ); - senf::Scheduler::instance().restart(); + senf::scheduler::restart(); detail::DaemonWatcher watcher (pid, coutpipe[0], cerrpipe[0], stdout_, stderr_); watcher.run(); @@ -563,7 +573,7 @@ prefix_ senf::detail::DaemonWatcher::DaemonWatcher(int pid, int coutpipe, int ce : childPid_(pid), coutpipe_(coutpipe), cerrpipe_(cerrpipe), stdout_(stdout), stderr_(stderr), sigChld_(false), cldSignal_ (SIGCHLD, senf::membind(&DaemonWatcher::sigChld, this)), - timer_ ("DaemanWatcher watchdog", senf::membind(&DaemonWatcher::childOk, this)), + timer_ ("senf::detail::DaemonWatcher::childOk", senf::membind(&DaemonWatcher::childOk, this)), coutForwarder_(coutpipe_, boost::bind(&DaemonWatcher::pipeClosed, this, 1)), cerrForwarder_(cerrpipe_, boost::bind(&DaemonWatcher::pipeClosed, this, 2)) { @@ -577,7 +587,7 @@ prefix_ senf::detail::DaemonWatcher::DaemonWatcher(int pid, int coutpipe, int ce prefix_ void senf::detail::DaemonWatcher::run() { - Scheduler::instance().process(); + scheduler::process(); } //////////////////////////////////////// @@ -595,7 +605,7 @@ prefix_ void senf::detail::DaemonWatcher::pipeClosed(int id) childDied(); // does not return if (::kill(childPid_, SIGUSR1) < 0 && errno != ESRCH) SENF_THROW_SYSTEM_EXCEPTION("::kill()"); - timer_.timeout(Scheduler::instance().eventTime() + ClockService::seconds(1)); + timer_.timeout(scheduler::eventTime() + ClockService::seconds(1)); } } @@ -623,7 +633,7 @@ prefix_ void senf::detail::DaemonWatcher::childDied() prefix_ void senf::detail::DaemonWatcher::childOk() { - Scheduler::instance().terminate(); + scheduler::terminate(); } /////////////////////////////////////////////////////////////////////////// @@ -631,7 +641,7 @@ prefix_ void senf::detail::DaemonWatcher::childOk() prefix_ senf::detail::DaemonWatcher::Forwarder::Forwarder(int src, Callback cb) : src_(src), cb_(cb), - readevent_("DaemanWatcher::Forwarder", senf::membind(&Forwarder::readData, this), + readevent_("senf::detail::DaemonWatcher::Forwarder::readevent", senf::membind(&Forwarder::readData, this), src_, scheduler::FdEvent::EV_READ) {} @@ -680,7 +690,7 @@ prefix_ void senf::detail::DaemonWatcher::Forwarder::readData(int event) prefix_ void senf::detail::DaemonWatcher::Forwarder::writeData(int event, Target * target) { - if (event != Scheduler::EV_WRITE) { + if (event != scheduler::FdEvent::EV_WRITE) { // Broken pipe while writing data ? Not much, we can do here, we just drop the data targets_.erase_and_destroy(Targets::current(*target),DestroyDelete()); if (targets_.empty() && src_ == -1)