3951a5faf1
- Release v208: + logind gained support for facilitating privileged input and drm devices access for unprivileged clients (helps Wayland / kmscon). + New kernel command line luks.options= allows to specify LUKS options, when used with luks.uuid= + tmpfileS.d snippets can uses specifier expansion in path names (%m, %b, %H, %v). + New tmpfiles.d command "m" introduced to change owner/group/access mode of a file/directory only if it exists. + MemorySoftLimit= cgroup settings is no longer supported (underlying kernel cgroup attribute will disappear in the future). + memeory.use_hierarchy cgroup attribute is enabled for all cgroups systemd creates in memory cgroup hierarchy. + New filed _SYSTEMD_SLICE= is logged in journal messages related to a slice. + systemd-journald will no longer adjust the group of journal files it creates to "systemd-journal" group. Permissions and owernship is adjusted when package is upgraded. + Backlight and random seed files are now stored in /var/lib/systemd. + Boot time performance measurements included ACPI 5.0 FPDT informations if available. - Drop merged patches: 0001-cgroup-add-the-missing-setting-of-variable-s-value.patch, 0002-cgroup-correct-the-log-information.patch, 0003-cgroup-fix-incorrectly-setting-memory-cgroup.patch, 0004-random-seed-we-should-return-errno-of-failed-loop_wr.patch, 0005-core-cgroup-first-print-then-free.patch, OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=448
75 lines
2.5 KiB
Diff
75 lines
2.5 KiB
Diff
From 7400b9d2e99938d17b281d7df43680eade18666e Mon Sep 17 00:00:00 2001
|
|
From: Lennart Poettering <lennart@poettering.net>
|
|
Date: Tue, 1 Oct 2013 05:06:56 +0200
|
|
Subject: [PATCH] core: whenever a new PID is passed to us, make sure we watch
|
|
it
|
|
|
|
---
|
|
src/core/service.c | 21 +++++++++++++++------
|
|
1 file changed, 15 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/core/service.c b/src/core/service.c
|
|
index 24b7bef..6792024 100644
|
|
--- a/src/core/service.c
|
|
+++ b/src/core/service.c
|
|
@@ -191,7 +191,13 @@ static int service_set_main_pid(Service *s, pid_t pid) {
|
|
if (pid == getpid())
|
|
return -EINVAL;
|
|
|
|
- service_unwatch_main_pid(s);
|
|
+ if (s->main_pid == pid && s->main_pid_known)
|
|
+ return 0;
|
|
+
|
|
+ if (s->main_pid != pid) {
|
|
+ service_unwatch_main_pid(s);
|
|
+ exec_status_start(&s->main_exec_status, pid);
|
|
+ }
|
|
|
|
s->main_pid = pid;
|
|
s->main_pid_known = true;
|
|
@@ -205,8 +211,6 @@ static int service_set_main_pid(Service *s, pid_t pid) {
|
|
} else
|
|
s->main_pid_alien = false;
|
|
|
|
- exec_status_start(&s->main_exec_status, pid);
|
|
-
|
|
return 0;
|
|
}
|
|
|
|
@@ -2696,8 +2700,10 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
|
|
|
|
if (parse_pid(value, &pid) < 0)
|
|
log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
|
|
- else
|
|
- service_set_main_pid(s, (pid_t) pid);
|
|
+ else {
|
|
+ service_set_main_pid(s, pid);
|
|
+ unit_watch_pid(UNIT(s), pid);
|
|
+ }
|
|
} else if (streq(key, "main-pid-known")) {
|
|
int b;
|
|
|
|
@@ -3389,6 +3395,7 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
|
|
log_debug_unit(u->id,
|
|
"%s: got %s", u->id, e);
|
|
service_set_main_pid(s, pid);
|
|
+ unit_watch_pid(UNIT(s), pid);
|
|
}
|
|
}
|
|
|
|
@@ -3685,8 +3692,10 @@ static void service_bus_query_pid_done(
|
|
(s->state == SERVICE_START ||
|
|
s->state == SERVICE_START_POST ||
|
|
s->state == SERVICE_RUNNING ||
|
|
- s->state == SERVICE_RELOAD))
|
|
+ s->state == SERVICE_RELOAD)){
|
|
service_set_main_pid(s, pid);
|
|
+ unit_watch_pid(UNIT(s), pid);
|
|
+ }
|
|
}
|
|
|
|
int service_set_socket_fd(Service *s, int fd, Socket *sock) {
|
|
--
|
|
1.8.4
|
|
|