mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-19 18:26:44 +02:00
67 lines
2.4 KiB
Diff
67 lines
2.4 KiB
Diff
From 17f33c1968a51484eefdafbfb5b8fef5ac13d215 Mon Sep 17 00:00:00 2001
|
|
From: Natanael Copa <ncopa@alpinelinux.org>
|
|
Date: Wed, 1 Feb 2017 04:17:14 +0000
|
|
Subject: [PATCH] rc: pull in sysinit and boot as stacked levels when needed
|
|
|
|
We need start services from sysinit and boot runlevel, even if the new
|
|
runlevel is empty.
|
|
|
|
This fixes problem introduced with commit 7716bf31 (Fix stacked runlevel
|
|
support), at which the start_services list are no longer used to start
|
|
the services.
|
|
|
|
This also make sure that all services in sysinit and boot runlevels are
|
|
started before switching to next. This was not guaranteed when switching
|
|
to a non-empty runlevel.
|
|
|
|
Fixes issue #54.
|
|
---
|
|
src/rc/rc.c | 7 ++++---
|
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/rc/rc.c b/src/rc/rc.c
|
|
index ef46925d..82786074 100644
|
|
--- a/src/openrc/rc.c
|
|
+++ b/src/openrc/rc.c
|
|
@@ -751,6 +751,7 @@ int main(int argc, char **argv)
|
|
const char *bootlevel = NULL;
|
|
char *newlevel = NULL;
|
|
const char *systype = NULL;
|
|
+ RC_STRINGLIST *runlevel_chain;
|
|
RC_STRINGLIST *deporder = NULL;
|
|
RC_STRINGLIST *tmplist;
|
|
RC_STRING *service;
|
|
@@ -1007,6 +1008,7 @@ int main(int argc, char **argv)
|
|
main_hotplugged_services = rc_services_in_state(RC_SERVICE_HOTPLUGGED);
|
|
main_start_services = rc_services_in_runlevel_stacked(newlevel ?
|
|
newlevel : runlevel);
|
|
+ runlevel_chain = rc_runlevel_stacks(newlevel ? newlevel : runlevel);
|
|
if (strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SHUTDOWN) != 0 &&
|
|
strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SYSINIT) != 0)
|
|
{
|
|
@@ -1024,6 +1026,7 @@ int main(int argc, char **argv)
|
|
tmplist = rc_services_in_runlevel(bootlevel);
|
|
TAILQ_CONCAT(main_start_services, tmplist, entries);
|
|
free(tmplist);
|
|
+ rc_stringlist_add(runlevel_chain, bootlevel);
|
|
}
|
|
if (main_hotplugged_services) {
|
|
TAILQ_FOREACH(service, main_hotplugged_services,
|
|
@@ -1032,6 +1035,7 @@ int main(int argc, char **argv)
|
|
service->value);
|
|
}
|
|
}
|
|
+ rc_stringlist_add(runlevel_chain, RC_LEVEL_SYSINIT);
|
|
}
|
|
|
|
parallel = rc_conf_yesno("rc_parallel");
|
|
@@ -1088,9 +1092,6 @@ int main(int argc, char **argv)
|
|
|
|
/* If we have a list of services to start then... */
|
|
if (main_start_services) {
|
|
- /* Get a list of the chained runlevels which compose the target runlevel */
|
|
- RC_STRINGLIST *runlevel_chain = rc_runlevel_stacks(runlevel);
|
|
-
|
|
/* Loop through them in reverse order. */
|
|
RC_STRING *rlevel;
|
|
TAILQ_FOREACH_REVERSE(rlevel, runlevel_chain, rc_stringlist, entries)
|