Workaround problems with threaded globus by setting signal mask (SB #81371).
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Wed, 15 Jun 2011 15:32:54 +0000 (15:32 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Wed, 15 Jun 2011 15:32:54 +0000 (15:32 +0000)
Added preventive 'kill -9' into startup script too.

org.glite.px.proxyrenewal/config/startup
org.glite.px.proxyrenewal/src/renew.c
org.glite.px.proxyrenewal/src/renewd.c

index 98f9047..e224e61 100755 (executable)
@@ -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"
 }
 
index ecf4e62..55da40c 100644 (file)
@@ -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);
index 73b9ac6..312561a 100644 (file)
@@ -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;