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