From: WaLyong Cho Date: Tue, 7 Jun 2016 14:26:42 +0000 (+0900) Subject: activation: set children oom_score_adj to 0 X-Git-Tag: dbus-1.10.10~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2fe59f1892825ced87c45ae25d9f5795b1d735b6;p=thirdparty%2Fdbus.git activation: set children oom_score_adj to 0 If dbus is running as systemd service, dbus daemon is running with oom_score_adj -900 by OOMScoreAdjust=-900. And children will also have same value with dbus daemon. To avoid this, set the child itself values after fork () to 0. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=32851 Reviewed-by: Simon McVittie --- diff --git a/dbus/dbus-spawn.c b/dbus/dbus-spawn.c index ddd254dc5..45f3d87d9 100644 --- a/dbus/dbus-spawn.c +++ b/dbus/dbus-spawn.c @@ -1354,6 +1354,26 @@ _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p, } else if (grandchild_pid == 0) { +#ifdef __linux__ + int fd = -1; + +#ifdef O_CLOEXEC + fd = open ("/proc/self/oom_score_adj", O_WRONLY | O_CLOEXEC); +#endif + + if (fd < 0) + { + fd = open ("/proc/self/oom_score_adj", O_WRONLY); + _dbus_fd_set_close_on_exec (fd); + } + + if (fd >= 0) + { + if (write (fd, "0", sizeof (char)) < 0) + _dbus_warn ("writing oom_score_adj error: %s\n", strerror (errno)); + _dbus_close (fd, NULL); + } +#endif /* Go back to ignoring SIGPIPE, since it's evil */ signal (SIGPIPE, SIG_IGN);