Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
systemd-mini.1472
remain_after_exit-initscript-heuristic-and-add-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File remain_after_exit-initscript-heuristic-and-add-new-LSB-hea.patch of Package systemd-mini.1472
From: Frederic Crozat <fcrozat@suse.com> Date: Wed, 7 Dec 2011 15:15:07 +0000 Subject: remain_after_exit initscript heuristic and add new LSB headers Add remain_after_exit heuristic for initscripts and add LSB headers PIDFile: and X-Systemd-RemainAfterExit to control it. (bnc#721426) (bnc#727771) --- src/core/service.c | 34 ++++++++++++++++++++++++++++++++-- src/core/service.h | 1 + 2 files changed, 33 insertions(+), 2 deletions(-) Index: systemd-208/src/core/service.c =================================================================== --- systemd-208.orig/src/core/service.c +++ systemd-208/src/core/service.c @@ -135,6 +135,7 @@ static void service_init(Unit *u) { #ifdef HAVE_SYSV_COMPAT s->sysv_start_priority = -1; s->sysv_start_priority_from_rcnd = -1; + s->sysv_remain_after_exit_heuristic = true; #endif s->socket_fd = -1; s->guess_main_pid = true; @@ -883,6 +884,34 @@ static int service_load_sysv_path(Servic free(short_description); short_description = d; + } else if (startswith_no_case(t, "PIDFile:")) { + char *fn; + + state = LSB; + + fn = strstrip(t+8); + if (!path_is_absolute(fn)) { + log_warning("[%s:%u] PID file not absolute. Ignoring.", path, line); + continue; + } + + if (!(fn = strdup(fn))) { + r = -ENOMEM; + goto finish; + } + + free(s->pid_file); + s->pid_file = fn; + s->sysv_remain_after_exit_heuristic = false; + s->remain_after_exit = false; + } else if (startswith_no_case(t, "X-Systemd-RemainAfterExit:")) { + char *j; + + state = LSB; + if ((j = strstrip(t+26)) && *j) { + s->remain_after_exit = parse_boolean(j); + s->sysv_remain_after_exit_heuristic = false; + } } else if (state == LSB_DESCRIPTION) { if (startswith(l, "#\t") || startswith(l, "# ")) { @@ -933,7 +962,8 @@ static int service_load_sysv_path(Servic /* Special setting for all SysV services */ s->type = SERVICE_FORKING; - s->remain_after_exit = !s->pid_file; + if (s->sysv_remain_after_exit_heuristic) + s->remain_after_exit = !s->pid_file; s->guess_main_pid = false; s->restart = SERVICE_RESTART_NO; s->exec_context.ignore_sigpipe = false; @@ -2080,7 +2110,7 @@ static void service_enter_running(Servic if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) && (s->bus_name_good || s->type != SERVICE_DBUS)) { #ifdef HAVE_SYSV_COMPAT - if (s->sysv_enabled && !s->pid_file) + if (s->sysv_enabled && !s->pid_file && s->sysv_remain_after_exit_heuristic) s->remain_after_exit = false; #endif service_set_state(s, SERVICE_RUNNING); Index: systemd-208/src/core/service.h =================================================================== --- systemd-208.orig/src/core/service.h +++ systemd-208/src/core/service.h @@ -178,6 +178,7 @@ struct Service { bool is_sysv:1; bool sysv_has_lsb:1; bool sysv_enabled:1; + bool sysv_remain_after_exit_heuristic:1; int sysv_start_priority_from_rcnd; int sysv_start_priority;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor