diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-04 23:56:19 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-04 23:56:19 +0900 |
| commit | ebfc5f55e50972520ead1fda7cabcdc494c61e3f (patch) | |
| tree | 28f38146a71ace546d67ac3742b9e91855aed515 /src/MultiUrlRequestInfo.cc | |
| parent | 7d55341fded7b88f528b62a5527f9df8bc3259d8 (diff) | |
Add SessionConfig to store per Session config
sessionConfigSetKeepRunning() was removed and SessionConfig has
keepRunning member instead. Signal handlers are now all prepared in
MultiUrlRequestGroup object. Setting SessionConfig.useSignalHandler to
false will avoid signal handler setup.
Diffstat (limited to 'src/MultiUrlRequestInfo.cc')
| -rw-r--r-- | src/MultiUrlRequestInfo.cc | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc index 5746b748..7d16e33e 100644 --- a/src/MultiUrlRequestInfo.cc +++ b/src/MultiUrlRequestInfo.cc @@ -112,8 +112,9 @@ MultiUrlRequestInfo::MultiUrlRequestInfo : option_(op), statCalc_(statCalc), summaryOut_(summaryOut), - uriListParser_(uriListParser) + uriListParser_(uriListParser), // TODO init mask_ + useSignalHandler_(true) { requestGroups_.swap(requestGroups); } @@ -238,27 +239,15 @@ int MultiUrlRequestInfo::prepare() if(uriListParser_) { e_->getRequestGroupMan()->setUriListParser(uriListParser_); } -#ifdef HAVE_SIGACTION - sigemptyset(&mask_); - sigaddset(&mask_, SIGINT); - sigaddset(&mask_, SIGTERM); -#ifdef SIGHUP - sigaddset(&mask_, SIGHUP); -#endif // SIGHUP -#else // !HAVE_SIGACTION - mask_ = 0; -#endif // !HAVE_SIGACTION - -#ifdef SIGHUP - util::setGlobalSignalHandler(SIGHUP, &mask_, handler, 0); -#endif // SIGHUP - util::setGlobalSignalHandler(SIGINT, &mask_, handler, 0); - util::setGlobalSignalHandler(SIGTERM, &mask_, handler, 0); - + if(useSignalHandler_) { + setupSignalHandlers(); + } e_->getRequestGroupMan()->getNetStat().downloadStart(); } catch(RecoverableException& e) { SingletonHolder<Notifier>::clear(); - resetSignalHandlers(); + if(useSignalHandler_) { + resetSignalHandlers(); + } return -1; } return 0; @@ -319,10 +308,43 @@ error_code::Value MultiUrlRequestInfo::execute() A2_LOG_ERROR_EX(EX_EXCEPTION_CAUGHT, e); } error_code::Value returnValue = getResult(); - resetSignalHandlers(); + if(useSignalHandler_) { + resetSignalHandlers(); + } return returnValue; } +void MultiUrlRequestInfo::setupSignalHandlers() +{ +#ifdef HAVE_SIGACTION + sigemptyset(&mask_); +#else // !HAVE_SIGACTION + mask_ = 0; +#endif // !HAVE_SIGACTION +#ifdef SIGPIPE + util::setGlobalSignalHandler(SIGPIPE, &mask_, SIG_IGN, 0); +#endif // SIGPIPE +#ifdef SIGCHLD + // Avoid to create zombie process when forked child processes are + // died. + util::setGlobalSignalHandler(SIGCHLD, &mask_, SIG_IGN, 0); +#endif // SIGCHILD + +#ifdef HAVE_SIGACTION + sigaddset(&mask_, SIGINT); + sigaddset(&mask_, SIGTERM); +# ifdef SIGHUP + sigaddset(&mask_, SIGHUP); +# endif // SIGHUP +#endif // HAVE_SIGACTION + +#ifdef SIGHUP + util::setGlobalSignalHandler(SIGHUP, &mask_, handler, 0); +#endif // SIGHUP + util::setGlobalSignalHandler(SIGINT, &mask_, handler, 0); + util::setGlobalSignalHandler(SIGTERM, &mask_, handler, 0); +} + void MultiUrlRequestInfo::resetSignalHandlers() { #ifdef HAVE_SIGACTION @@ -333,6 +355,13 @@ void MultiUrlRequestInfo::resetSignalHandlers() #endif // SIGHUP util::setGlobalSignalHandler(SIGINT, &mask_, SIG_DFL, 0); util::setGlobalSignalHandler(SIGTERM, &mask_, SIG_DFL, 0); + +#ifdef SIGCHLD + util::setGlobalSignalHandler(SIGCHLD, &mask_, SIG_DFL, 0); +#endif // SIGCHILD +#ifdef SIGPIPE + util::setGlobalSignalHandler(SIGPIPE, &mask_, SIG_DFL, 0); +#endif // SIGPIPE } const SharedHandle<DownloadEngine>& |
