From 5d452f9ceceabf2bf69acb58e69a41fb41011e37 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 2 Sep 2010 23:26:04 +0200 Subject: [PATCH] dbus: make sure to flush bus connection before disconnecting, so that no messages are lost --- fixme | 4 ---- src/cgroups-agent.c | 1 + src/initctl.c | 5 +++-- src/systemctl.c | 2 ++ src/update-utmp.c | 5 +++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/fixme b/fixme index c986d74a9a..312e062121 100644 --- a/fixme +++ b/fixme @@ -80,12 +80,8 @@ v9: * fix terminal setup -* figure out ssh disconnect hang - * home.mount failing should not be able to cancel umount.target (IgnoreDependencyFailure=yes borked?) -* disallow further dbus+socket activation on shutdown - External: * place /etc/inittab with explaining blurb. diff --git a/src/cgroups-agent.c b/src/cgroups-agent.c index 6f7a857eaf..30aeede943 100644 --- a/src/cgroups-agent.c +++ b/src/cgroups-agent.c @@ -82,6 +82,7 @@ int main(int argc, char *argv[]) { finish: if (bus) { + dbus_connection_flush(bus); dbus_connection_close(bus); dbus_connection_unref(bus); } diff --git a/src/initctl.c b/src/initctl.c index 6c3ec02647..10db2dda18 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -232,8 +232,9 @@ static void server_done(Server *s) { close_nointr_nofail(s->epoll_fd); if (s->bus) { - dbus_connection_close(s->bus); - dbus_connection_unref(s->bus); + dbus_connection_flush(s->bus); + dbus_connection_close(s->bus); + dbus_connection_unref(s->bus); } } diff --git a/src/systemctl.c b/src/systemctl.c index ea09c3cf36..ecf3e013f2 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -4624,6 +4624,7 @@ finish: dbus_message_unref(reply); if (bus) { + dbus_connection_flush(bus); dbus_connection_close(bus); dbus_connection_unref(bus); } @@ -5039,6 +5040,7 @@ int main(int argc, char*argv[]) { finish: if (bus) { + dbus_connection_flush(bus); dbus_connection_close(bus); dbus_connection_unref(bus); } diff --git a/src/update-utmp.c b/src/update-utmp.c index e45bee10ce..b06f5a06cb 100644 --- a/src/update-utmp.c +++ b/src/update-utmp.c @@ -406,8 +406,9 @@ finish: #endif if (c.bus) { - dbus_connection_close(c.bus); - dbus_connection_unref(c.bus); + dbus_connection_flush(c.bus); + dbus_connection_close(c.bus); + dbus_connection_unref(c.bus); } dbus_error_free(&error);