mirror of
https://github.com/systemd/systemd.git
synced 2025-01-05 13:18:06 +03:00
service: properly remember if a sysv is actually enabled
Previously we checked the SysV priority value to figure out if a SysV unit was enabled or not, since th value was mostly read from the S startup links. Since we read this value from the LSB headers as a fallback we hence ended up considering a lot more services enabled than were actually enabled. This patch adds an explicit boolean which encodes whether a sysv service is enabled or not via S links. https://bugzilla.redhat.com/show_bug.cgi?id=615293
This commit is contained in:
parent
2cf3143ac3
commit
5de6b30219
@ -566,7 +566,7 @@ static int service_load_sysv_path(Service *s, const char *path) {
|
||||
|
||||
if (unit_name_to_type(m) == UNIT_SERVICE)
|
||||
r = unit_add_name(u, m);
|
||||
else if (s->sysv_start_priority >= 0)
|
||||
else if (s->sysv_enabled)
|
||||
r = unit_add_two_dependencies_by_name_inverse(u, UNIT_AFTER, UNIT_WANTS, m, NULL, true);
|
||||
else
|
||||
r = unit_add_dependency_by_name_inverse(u, UNIT_AFTER, m, NULL, true);
|
||||
@ -1006,8 +1006,10 @@ static void service_dump(Unit *u, FILE *f, const char *prefix) {
|
||||
|
||||
if (s->sysv_start_priority >= 0)
|
||||
fprintf(f,
|
||||
"%sSysVStartPriority: %i\n",
|
||||
prefix, s->sysv_start_priority);
|
||||
"%sSysVStartPriority: %i\n"
|
||||
"%sSysVEnabled: %s\n",
|
||||
prefix, s->sysv_start_priority,
|
||||
prefix, yes_no(s->sysv_enabled));
|
||||
|
||||
if (s->sysv_runlevels)
|
||||
fprintf(f, "%sSysVRunLevels: %s\n",
|
||||
@ -2627,9 +2629,11 @@ static int service_enumerate(Manager *m) {
|
||||
}
|
||||
|
||||
if (de->d_name[0] == 'S' &&
|
||||
(rcnd_table[i].type == RUNLEVEL_UP || rcnd_table[i].type == RUNLEVEL_SYSINIT))
|
||||
(rcnd_table[i].type == RUNLEVEL_UP || rcnd_table[i].type == RUNLEVEL_SYSINIT)) {
|
||||
SERVICE(service)->sysv_start_priority =
|
||||
MAX(a*10 + b, SERVICE(service)->sysv_start_priority);
|
||||
SERVICE(service)->sysv_enabled = true;
|
||||
}
|
||||
|
||||
manager_dispatch_load_queue(m);
|
||||
service = unit_follow_merge(service);
|
||||
|
@ -111,18 +111,14 @@ struct Service {
|
||||
bool root_directory_start_only;
|
||||
bool valid_no_process;
|
||||
|
||||
bool main_pid_known:1;
|
||||
|
||||
/* If we shut down, remember why */
|
||||
bool failure:1;
|
||||
|
||||
bool main_pid_known:1;
|
||||
bool bus_name_good:1;
|
||||
|
||||
bool allow_restart:1;
|
||||
|
||||
bool got_socket_fd:1;
|
||||
|
||||
bool sysv_has_lsb:1;
|
||||
bool sysv_enabled:1;
|
||||
|
||||
int socket_fd;
|
||||
int sysv_start_priority;
|
||||
|
Loading…
Reference in New Issue
Block a user