From 176a1807d281a429f14ddd3fe750521bb30e2c7a Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Mar 16 2018 22:22:34 +0000 Subject: Add patch for Reload bug --- diff --git a/0003-core-when-reloading-delay-any-actions-on-journal-and.patch b/0003-core-when-reloading-delay-any-actions-on-journal-and.patch new file mode 100644 index 0000000..63514e9 --- /dev/null +++ b/0003-core-when-reloading-delay-any-actions-on-journal-and.patch @@ -0,0 +1,48 @@ +From e63ebf71edd7947f29389c72e851d8df5c7bedda Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 16 Mar 2018 23:01:05 +0100 +Subject: [PATCH] core: when reloading, delay any actions on journal and dbus + connections + +manager_recheck_journal() and manager_recheck_dbus() would be called to early +while we were deserialiazing units, before the systemd-journald.service and +dbus.service have been deserialized. In effect we'd disable logging to the +journald and close the bus connection. The first is not very noticable, it +mostly means that logs emitted during deserialization are lost. The second is +more noticeable, because manager_recheck_dbus() would call bus_done_api() and +bus_done_system() and close dbus connections. Logging and bus connection would +then be restored later after the respective units have been deserialized. + +This is easily reproduced by calling: + $ sudo gdbus call --system --dest org.freedesktop.systemd1 --object-path /org/freedesktop/systemd1 --method "org.freedesktop.systemd1.Manager.Reload" +which works fine before 8559b3b75cb, and then starts failing with: + Error: GDBus.Error:org.freedesktop.DBus.Error.NoReply: Remote peer disconnected + +None of this should happen, and we should delay changing state until after +deserialization is complete when reloading. manager_reload() already included +the calls to manager_recheck_journal() and manager_recheck_dbus(), so the +connection state will be updated after deserialization during reloading is done. + +Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1554578. +--- + src/core/unit.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index 815701ad4e..f88aabba61 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2501,8 +2501,11 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su + } + } + +- manager_recheck_journal(m); +- manager_recheck_dbus(m); ++ if (!MANAGER_IS_RELOADING(u->manager)) { ++ manager_recheck_journal(m); ++ manager_recheck_dbus(m); ++ } ++ + unit_trigger_notify(u); + + if (!MANAGER_IS_RELOADING(u->manager)) { diff --git a/systemd.spec b/systemd.spec index f1a890d..5d79adf 100644 --- a/systemd.spec +++ b/systemd.spec @@ -13,7 +13,7 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd Version: 238 -Release: 3%{?gitcommit:.git%{gitcommitshort}}%{?dist} +Release: 4%{?gitcommit:.git%{gitcommitshort}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: System and Service Manager @@ -50,6 +50,7 @@ GIT_DIR=../../src/systemd/.git git diffab -M v233..master@{2017-06-15} -- hwdb/[ Patch0001: 0001-test-cgroup-util-bail-out-when-running-under-mock.patch Patch0002: 0002-basic-fs-util-skip-fsync_directory_of_file-if-proc-s.patch +Patch0003: 0003-core-when-reloading-delay-any-actions-on-journal-and.patch Patch0998: 0998-resolved-create-etc-resolv.conf-symlink-at-runtime.patch @@ -704,6 +705,9 @@ fi %files tests -f .file-list-tests %changelog +* Fri Mar 16 2018 Zbigniew Jędrzejewski-Szmek - 238-4 +- Do not close dbus connection during dbus reload call (#1554578) + * Wed Mar 7 2018 Zbigniew Jędrzejewski-Szmek - 238-3 - Revert the patches for GRUB BootLoaderSpec support - Add patch for /etc/machine-id creation (#1552843)