From: Mike Yuan Date: Sat, 11 Jan 2025 16:10:43 +0000 (+0100) Subject: shared/bus-util: move bus_message_hash_ops to bus-message-util X-Git-Tag: v258-rc1~1622^2~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e3d37628aabff92e4b756e63ef0a6cd4569ce743;p=thirdparty%2Fsystemd.git shared/bus-util: move bus_message_hash_ops to bus-message-util --- diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c index 69c7680b9e5..08c917aee2e 100644 --- a/src/home/homed-manager-bus.c +++ b/src/home/homed-manager-bus.c @@ -4,6 +4,7 @@ #include "alloc-util.h" #include "bus-common-errors.h" +#include "bus-message-util.h" #include "bus-polkit.h" #include "format-util.h" #include "home-util.h" @@ -704,17 +705,17 @@ static int method_rebalance(sd_bus_message *message, void *userdata, sd_bus_erro int r; r = manager_schedule_rebalance(m, /* immediately= */ true); - if (r == 0) - return sd_bus_reply_method_errorf(message, BUS_ERROR_REBALANCE_NOT_NEEDED, "No home directories need rebalancing."); if (r < 0) return r; + if (r == 0) + return sd_bus_reply_method_errorf(message, BUS_ERROR_REBALANCE_NOT_NEEDED, "No home directories need rebalancing."); /* Keep a reference to this message, so that we can reply to it once we are done */ - r = set_ensure_put(&m->rebalance_queued_method_calls, &bus_message_hash_ops, message); + r = set_ensure_consume(&m->rebalance_queued_method_calls, &bus_message_hash_ops, sd_bus_message_ref(message)); if (r < 0) return log_error_errno(r, "Failed to track rebalance bus message: %m"); + assert(r > 0); - sd_bus_message_ref(message); return 1; } diff --git a/src/login/logind-brightness.c b/src/login/logind-brightness.c index 40bcb39ce0c..b3e7718394a 100644 --- a/src/login/logind-brightness.c +++ b/src/login/logind-brightness.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include "bus-message-util.h" #include "bus-util.h" #include "device-util.h" #include "hash-funcs.h" @@ -173,10 +174,9 @@ static int set_add_message(Set **set, sd_bus_message *message) { if (r <= 0) return r; - r = set_ensure_put(set, &bus_message_hash_ops, message); + r = set_ensure_consume(set, &bus_message_hash_ops, sd_bus_message_ref(message)); if (r <= 0) return r; - sd_bus_message_ref(message); return 1; } diff --git a/src/shared/bus-message-util.c b/src/shared/bus-message-util.c index e93be9b3c50..a6523ff00e0 100644 --- a/src/shared/bus-message-util.c +++ b/src/shared/bus-message-util.c @@ -246,3 +246,7 @@ int bus_message_dump_fd(sd_bus_message *message) { return 0; } + +DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(bus_message_hash_ops, + void, trivial_hash_func, trivial_compare_func, + sd_bus_message, sd_bus_message_unref); diff --git a/src/shared/bus-message-util.h b/src/shared/bus-message-util.h index 698960561ce..baec1cb92b7 100644 --- a/src/shared/bus-message-util.h +++ b/src/shared/bus-message-util.h @@ -21,3 +21,5 @@ int bus_message_read_dns_servers( int bus_message_dump_string(sd_bus_message *message); int bus_message_dump_fd(sd_bus_message *message); + +extern const struct hash_ops bus_message_hash_ops; diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c index d6189deb180..9e875751e71 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -862,16 +862,6 @@ int bus_register_malloc_status(sd_bus *bus, const char *destination) { return 0; } -static void bus_message_unref_wrapper(void *m) { - sd_bus_message_unref(m); -} - -const struct hash_ops bus_message_hash_ops = { - .hash = trivial_hash_func, - .compare = trivial_compare_func, - .free_value = bus_message_unref_wrapper, -}; - int bus_message_append_string_set(sd_bus_message *m, Set *set) { const char *s; int r; diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h index b08635fd366..755421c11f5 100644 --- a/src/shared/bus-util.h +++ b/src/shared/bus-util.h @@ -78,8 +78,6 @@ int bus_reply_pair_array(sd_bus_message *m, char **l); /* Listen to GetMallocInfo() calls to 'destination' and return malloc_info() via FD */ int bus_register_malloc_status(sd_bus *bus, const char *destination); -extern const struct hash_ops bus_message_hash_ops; - int bus_message_append_string_set(sd_bus_message *m, Set *s); int bus_property_get_string_set(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error); diff --git a/src/systemctl/systemctl-list-units.c b/src/systemctl/systemctl-list-units.c index a2f3074358e..b7cb103513d 100644 --- a/src/systemctl/systemctl-list-units.c +++ b/src/systemctl/systemctl-list-units.c @@ -5,6 +5,7 @@ #include "ansi-color.h" #include "bus-error.h" #include "bus-locator.h" +#include "bus-message-util.h" #include "format-table.h" #include "locale-util.h" #include "path-util.h" diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index c79bb864df0..b196034a252 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -17,6 +17,7 @@ #include "bus-locator.h" #include "bus-log-control-api.h" #include "bus-map-properties.h" +#include "bus-message-util.h" #include "bus-polkit.h" #include "bus-unit-util.h" #include "clock-util.h"