about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2023-11-10 16:31:17 +0100
committerLeah Neukirchen <leah@vuxu.org>2023-11-10 16:31:17 +0100
commit0d054402d434b3ea499eb8dcfebe07eacc51ea26 (patch)
treec917ea867a06ec3507d95142044945d659d4bcf3
parent2ee4684a1f63f24ae4017f8e0e1811b2944c5a7a (diff)
downloadnitro-0d054402d434b3ea499eb8dcfebe07eacc51ea26.tar.gz
nitro-0d054402d434b3ea499eb8dcfebe07eacc51ea26.tar.xz
nitro-0d054402d434b3ea499eb8dcfebe07eacc51ea26.zip
store start time as absolute time stamp
-rw-r--r--nitro.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/nitro.c b/nitro.c
index 18e2787..5abd3a0 100644
--- a/nitro.c
+++ b/nitro.c
@@ -17,7 +17,7 @@
 #include <time.h>
 #include <unistd.h>
 
-typedef int64_t deadline;		/* milliseconds since epoch */
+typedef int64_t deadline;		/* milliseconds since boot */
 
 deadline time_now()
 {
@@ -54,7 +54,7 @@ enum process_events {
 
 struct service {
 	char name[64];
-	deadline start;
+	time_t start;
 	deadline deadline;
 	int timeout;
 	pid_t pid;
@@ -118,7 +118,7 @@ proc_launch(int i)
 
 		services[i].state = PROC_FATAL;
 		services[i].pid = 0;
-		services[i].start = time_now();
+		services[i].start = time(0);
 		services[i].timeout = 0;
 		services[i].deadline = 0;
 		return;
@@ -126,7 +126,7 @@ proc_launch(int i)
 	close(alivepipefd[0]);
 
 	services[i].pid = child;
-	services[i].start = time_now();
+	services[i].start = time(0);
 	services[i].state = PROC_STARTING;
 	services[i].timeout = 2000;
 	services[i].deadline = 0;
@@ -262,22 +262,21 @@ process_step(int i, enum process_events ev)
 		services[i].deadline = 0;
 		switch (services[i].state) {
 		case PROC_STARTING:
+			proc_cleanup(i);
+			if (global_state != GLBL_UP)
+				break;
+			services[i].state = PROC_DELAY;
+			services[i].timeout = 1000;
+			services[i].deadline = 0;
+			break;
+
 		case PROC_UP:
 		case PROC_DEAD:
 		case PROC_RESTART:
 			proc_cleanup(i);
 			if (global_state != GLBL_UP)
 				break;
-
-			// XXX check too many restarts
-			deadline now = time_now();
-			if (now - services[i].start > 2000) {
-				proc_launch(i);
-			} else {
-				services[i].state = PROC_DELAY;
-				services[i].timeout = 1000;
-				services[i].deadline = 0;
-			}
+			proc_launch(i);
 			break;
 
 		case PROC_SHUTDOWN:
@@ -303,7 +302,6 @@ process_step(int i, enum process_events ev)
 			break;
 
 		case PROC_STARTING:
-			/* detect failed start */
 			services[i].state = PROC_UP;
 			break;