diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 8b6021d35f..89021ab15b 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -2276,8 +2276,8 @@ static DBusHandlerResult manager_message_handler( } if (reply) { - if (!dbus_connection_send(connection, reply, NULL)) - goto oom; + if (!bus_maybe_send_reply(connection, message, reply)) + goto oom; dbus_message_unref(reply); } diff --git a/src/shared/dbus-common.c b/src/shared/dbus-common.c index ee281e57f4..e9a78c299e 100644 --- a/src/shared/dbus-common.c +++ b/src/shared/dbus-common.c @@ -501,7 +501,7 @@ set_prop: } if (reply) { - if (!dbus_connection_send(c, reply, NULL)) + if (!bus_maybe_send_reply(c, message, reply)) goto oom; return DBUS_HANDLER_RESULT_HANDLED; @@ -713,6 +713,15 @@ const char *bus_errno_to_dbus(int error) { return DBUS_ERROR_FAILED; } +dbus_bool_t bus_maybe_send_reply (DBusConnection *c, + DBusMessage *message, + DBusMessage *reply) +{ + if (dbus_message_get_no_reply (message)) + return TRUE; + return dbus_connection_send (c, reply, NULL); +} + DBusHandlerResult bus_send_error_reply(DBusConnection *c, DBusMessage *message, DBusError *berror, int error) { _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; const char *name, *text; @@ -729,7 +738,7 @@ DBusHandlerResult bus_send_error_reply(DBusConnection *c, DBusMessage *message, if (!reply) goto oom; - if (!dbus_connection_send(c, reply, NULL)) + if (!bus_maybe_send_reply(c, message, reply)) goto oom; if (berror) diff --git a/src/shared/dbus-common.h b/src/shared/dbus-common.h index 005a715d0a..3b7ae16934 100644 --- a/src/shared/dbus-common.h +++ b/src/shared/dbus-common.h @@ -113,6 +113,10 @@ typedef struct BusBoundProperties { const void *const base; /* base pointer to which the offset must be added to reach data */ } BusBoundProperties; +dbus_bool_t bus_maybe_send_reply (DBusConnection *c, + DBusMessage *message, + DBusMessage *reply); + DBusHandlerResult bus_send_error_reply( DBusConnection *c, DBusMessage *message,