diff options
author | Leah Neukirchen <leah@vuxu.org> | 2023-12-23 00:33:47 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2023-12-23 00:33:47 +0100 |
commit | fb20a155ca63b4701284e584424018d7bb3aaeab (patch) | |
tree | 72d1069f4e64099a9f306d7d0e8e29dfde63ba80 | |
parent | 23b054269d8a3be98dcef42de16fb652f1964c2e (diff) | |
download | nitro-fb20a155ca63b4701284e584424018d7bb3aaeab.tar.gz nitro-fb20a155ca63b4701284e584424018d7bb3aaeab.tar.xz nitro-fb20a155ca63b4701284e584424018d7bb3aaeab.zip |
add rc.boot
-rw-r--r-- | nitro.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/nitro.c b/nitro.c index 1cb4c4a..c86f5a0 100644 --- a/nitro.c +++ b/nitro.c @@ -585,7 +585,7 @@ find_service(char *name) } int -add_service(char *name) +add_service(const char *name) { int i; for (i = 0; i < max_service; i++) @@ -629,6 +629,10 @@ rescan(int first) if (!S_ISDIR(st.st_mode)) continue; + // ignore magic boot service + if (strcmp(name, "rc.boot") == 0) + continue; + printf("SCAN %s\n", name); int i = add_service(name); @@ -826,7 +830,10 @@ handle_control_sock() { case 'd': case 'r': { + struct stat st; int i = find_service(buf + 1); + if (stat(buf + 1, &st) == 0) + i = add_service(buf + 1); if (i < 0) goto fail; @@ -890,6 +897,14 @@ has_died(pid_t pid, int status) services[i].deadline = 0; } + if (strcmp(services[i].name, "rc.boot") == 0) { + services[i].seen = 0; + proc_cleanup(i); + proc_zap(i); + // bring up rest of the services + rescan(1); + } + return; } @@ -1068,7 +1083,15 @@ main(int argc, char *argv[]) global_state = GLBL_UP; - rescan(1); + { + struct stat st; + if (stat("rc.boot", &st) == 0) { + int b = add_service("rc.boot"); + process_step(b, EVNT_WANT_UP); + } else { + rescan(1); + } + } struct pollfd fds[3]; fds[CHLD].fd = selfpipe[0]; |