Blame SOURCES/xinetd-2.3.14-retry-svc-activate-in-cps-restart.patch

4a9f2a
diff -Napur xinetd-2.3.14.old/xinetd/access.c xinetd-2.3.14.new/xinetd/access.c
4a9f2a
--- xinetd-2.3.14.old/xinetd/access.c	2005-10-05 10:15:33.000000000 -0700
4a9f2a
+++ xinetd-2.3.14.new/xinetd/access.c	2012-02-22 20:12:09.120973124 -0800
4a9f2a
@@ -89,9 +89,20 @@ static void cps_service_restart(void)
4a9f2a
                msg(LOG_ERR, func,
4a9f2a
                "Activating service %s", SC_NAME(scp));
4a9f2a
             } else {
4a9f2a
-               msg(LOG_ERR, func,
4a9f2a
-               "Error activating service %s", 
4a9f2a
-               SC_NAME(scp)) ;
4a9f2a
+               /* Try to restart the service */
4a9f2a
+               SVC_ATTEMPTS(sp) += 1;
4a9f2a
+               if ( SVC_ATTEMPTS(sp) < MAX_SVC_ATTEMPTS ) {
4a9f2a
+                  msg(LOG_ERR, func, 
4a9f2a
+                  "Error activating service %s, retrying %d more time(s)...",
4a9f2a
+                  SC_NAME(scp),
4a9f2a
+                  MAX_SVC_ATTEMPTS - SVC_ATTEMPTS(sp));
4a9f2a
+                  xtimer_add(cps_service_restart, 1);
4a9f2a
+               } else {
4a9f2a
+                  /* Give up */
4a9f2a
+                  msg(LOG_ERR, func,
4a9f2a
+                  "Error activating service %s", 
4a9f2a
+                  SC_NAME(scp));
4a9f2a
+               } 
4a9f2a
             } /* else */
4a9f2a
          }
4a9f2a
       }
4a9f2a
diff -Napur xinetd-2.3.14.old/xinetd/service.c xinetd-2.3.14.new/xinetd/service.c
4a9f2a
--- xinetd-2.3.14.old/xinetd/service.c	2012-02-22 19:16:56.288912783 -0800
4a9f2a
+++ xinetd-2.3.14.new/xinetd/service.c	2012-02-22 19:25:03.059356909 -0800
4a9f2a
@@ -397,6 +408,7 @@ status_e svc_activate( struct service *s
4a9f2a
     * Initialize the service data
4a9f2a
     */
4a9f2a
    SVC_RUNNING_SERVERS(sp)   = SVC_RETRIES(sp) = 0 ;
4a9f2a
+   SVC_ATTEMPTS(sp) = 0;
4a9f2a
 
4a9f2a
    if ( SC_MUST_LISTEN( scp ) )
4a9f2a
       (void) listen( SVC_FD(sp), LISTEN_BACKLOG ) ;
4a9f2a
diff -Napur xinetd-2.3.14.old/xinetd/xconfig.h xinetd-2.3.14.new/xinetd/xconfig.h
4a9f2a
--- xinetd-2.3.14.old/xinetd/xconfig.h	2003-02-19 09:29:28.000000000 -0800
4a9f2a
+++ xinetd-2.3.14.new/xinetd/xconfig.h	2012-02-22 19:20:20.360855514 -0800
4a9f2a
@@ -59,6 +59,12 @@
4a9f2a
 #define DEFAULT_LOOP_TIME			10
4a9f2a
 
4a9f2a
 /*
4a9f2a
+ * The number of times to attempt re-activating a service after being
4a9f2a
+ * deactivated due to the above.
4a9f2a
+ */
4a9f2a
+#define MAX_SVC_ATTEMPTS                         30
4a9f2a
+
4a9f2a
+/*
4a9f2a
  * Signal-to-action mapping
4a9f2a
  */
4a9f2a
 #ifndef RECONFIG_HARD_SIG