From 7b97f4773207d9e1301f5263229ceba26b515756 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 7 Jul 2010 02:21:16 +0200 Subject: [PATCH] dbus: send reload completion message on right connection --- src/dbus-manager.c | 1 + src/dbus.c | 14 ++++++++++++-- src/manager.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/dbus-manager.c b/src/dbus-manager.c index cd6a975b..7bf58b39 100644 --- a/src/dbus-manager.c +++ b/src/dbus-manager.c @@ -641,6 +641,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, if (!(m->queued_message = dbus_message_new_method_return(message))) goto oom; + m->queued_message_connection = connection; m->exit_code = MANAGER_RELOAD; } else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "Reexecute")) { diff --git a/src/dbus.c b/src/dbus.c index 6660cf0c..576f7850 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -496,12 +496,13 @@ unsigned bus_dispatch(Manager *m) { * dispatch any D-Bus messages, so that we won't end * up wanting to queue another message. */ - if (m->api_bus) - if (!dbus_connection_send(m->api_bus, m->queued_message, NULL)) + if (m->queued_message_connection) + if (!dbus_connection_send(m->queued_message_connection, m->queued_message, NULL)) return 0; dbus_message_unref(m->queued_message); m->queued_message = NULL; + m->queued_message_connection = NULL; } if ((c = set_first(m->bus_connections_for_dispatch))) { @@ -991,6 +992,15 @@ static void shutdown_connection(Manager *m, DBusConnection *c) { set_free(s); } + if (m->queued_message_connection == c) { + m->queued_message_connection = NULL; + + if (m->queued_message) { + dbus_message_unref(m->queued_message); + m->queued_message = NULL; + } + } + dbus_connection_set_dispatch_status_function(c, NULL, NULL, NULL); dbus_connection_flush(c); dbus_connection_close(c); diff --git a/src/manager.h b/src/manager.h index b9971818..5b3aaf33 100644 --- a/src/manager.h +++ b/src/manager.h @@ -160,6 +160,7 @@ struct Manager { * before the reload we queue the * reply message here, and * afterwards we send it */ + DBusConnection *queued_message_connection; /* The connection to send the queued message on */ Hashmap *watch_bus; /* D-Bus names => Unit object n:1 */ int32_t name_data_slot; -- 2.39.5