summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dbus-manager.c1
-rw-r--r--src/dbus.c14
-rw-r--r--src/manager.h1
3 files changed, 14 insertions, 2 deletions
diff --git a/src/dbus-manager.c b/src/dbus-manager.c
index cd6a975bfc..7bf58b392c 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 6660cf0c5a..576f7850b2 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 b9971818da..5b3aaf3364 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;