File: 0003-supervise.c_restart_process_when_fork_fails.diff

package info (click to toggle)
daemontools 1%3A0.76-7
  • links: PTS
  • area: main
  • in suites: bullseye, buster
  • size: 984 kB
  • sloc: ansic: 3,750; makefile: 463; sh: 415
file content (32 lines) | stat: -rw-r--r-- 797 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
diff -Nur admin.orig/daemontools-0.76/src/supervise.c admin/daemontools-0.76/src/supervise.c
--- admin.orig/daemontools-0.76/src/supervise.c	2010-02-19 11:08:15.000000000 +0100
+++ admin/daemontools-0.76/src/supervise.c	2010-02-19 12:53:16.000000000 +0100
@@ -86,6 +86,8 @@
 
 const char *run[2] = { "./run", 0 };
 
+int flagfailed = 0;
+
 void trystart(void)
 {
   int f;
@@ -94,6 +96,7 @@
     case -1:
       strerr_warn4(WARNING,"unable to fork for ",dir,", sleeping 60 seconds: ",&strerr_sys);
       deepsleep(60);
+      flagfailed = 1;
       trigger();
       return;
     case 0:
@@ -153,6 +156,11 @@
       }
     }
 
+    if (flagfailed && flagwant && flagwantup){
+      flagfailed = 0;
+      trystart();
+    }
+
     if (read(fdcontrol,&ch,1) == 1)
       switch(ch) {
 	case 'd':