From 590f1f0bde5dbf5aefcbfc2aa323a47f8ff83f10 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Wed, 15 Jun 2011 15:32:54 +0000 Subject: [PATCH] Workaround problems with threaded globus by setting signal mask (SB #81371). Added preventive 'kill -9' into startup script too. --- org.glite.px.proxyrenewal/config/startup | 10 ++++++++++ org.glite.px.proxyrenewal/src/renew.c | 9 +++++++++ org.glite.px.proxyrenewal/src/renewd.c | 15 ++++++++++++--- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/org.glite.px.proxyrenewal/config/startup b/org.glite.px.proxyrenewal/config/startup index 98f9047..e224e61 100755 --- a/org.glite.px.proxyrenewal/config/startup +++ b/org.glite.px.proxyrenewal/config/startup @@ -74,6 +74,16 @@ stop() { echo -n "Stopping ProxyRenewal Daemon: glite-proxy-renewd ..." killall glite-proxy-renewd + try=0 + while killall -0 glite-proxy-renewd >/dev/null 2>&1; do + sleep 1 + try=`expr $try + 1` + if [ $try = 10 ]; then + echo " force quit after $try seconds" + killall -9 glite-proxy-renewd + return 1 + fi + done echo " done" } diff --git a/org.glite.px.proxyrenewal/src/renew.c b/org.glite.px.proxyrenewal/src/renew.c index ecf4e62..55da40c 100644 --- a/org.glite.px.proxyrenewal/src/renew.c +++ b/org.glite.px.proxyrenewal/src/renew.c @@ -254,6 +254,7 @@ watchdog_start(glite_renewal_core_context ctx) struct sigaction sa; int force_renewal; int count = 0, num; + sigset_t mask; memset(&sa,0,sizeof(sa)); sa.sa_handler = register_signal; @@ -263,6 +264,14 @@ watchdog_start(glite_renewal_core_context ctx) sigaction(SIGTERM,&sa,NULL); sigaction(SIGPIPE,&sa,NULL); + sigemptyset(&mask); + sigaddset(&mask, SIGUSR1); + sigaddset(&mask, SIGINT); + sigaddset(&mask, SIGQUIT); + sigaddset(&mask, SIGTERM); + sigaddset(&mask, SIGPIPE); + sigprocmask(SIG_UNBLOCK, &mask, NULL); + while (count < RENEWAL_COUNTS_MAX && !die) { received_signal = -1; sleep(60 * 5); diff --git a/org.glite.px.proxyrenewal/src/renewd.c b/org.glite.px.proxyrenewal/src/renewd.c index 73b9ac6..312561a 100644 --- a/org.glite.px.proxyrenewal/src/renewd.c +++ b/org.glite.px.proxyrenewal/src/renewd.c @@ -524,6 +524,7 @@ int main(int argc, char *argv[]) struct sigaction sa; const char *s = NULL; glite_renewal_core_context ctx = NULL; + sigset_t mask; progname = strrchr(argv[0],'/'); if (progname) progname++; @@ -571,9 +572,6 @@ int main(int argc, char *argv[]) exit(1); } - globus_module_activate(GLOBUS_GSI_CERT_UTILS_MODULE); - globus_module_activate(GLOBUS_GSI_PROXY_MODULE); - if (!debug) { /* chdir ? */ if (daemon(1,0) == -1) { @@ -583,6 +581,9 @@ int main(int argc, char *argv[]) openlog(progname, LOG_PID, LOG_DAEMON); } + globus_module_activate(GLOBUS_GSI_CERT_UTILS_MODULE); + globus_module_activate(GLOBUS_GSI_PROXY_MODULE); + if (cert) setenv("X509_USER_CERT", cert, 1); @@ -603,6 +604,14 @@ int main(int argc, char *argv[]) sigaction(SIGCHLD,&sa,NULL); sigaction(SIGPIPE,&sa,NULL); + sigemptyset(&mask); + sigaddset(&mask, SIGINT); + sigaddset(&mask, SIGQUIT); + sigaddset(&mask, SIGTERM); + sigaddset(&mask, SIGCHLD); + sigaddset(&mask, SIGPIPE); + sigprocmask(SIG_UNBLOCK, &mask, NULL); + ret = start_watchdog(ctx, &pid); if (ret) return 1; -- 1.8.2.3