network: introduce reconfigure_data_free() and _freep()

No functional change, just refactoring.
This commit is contained in:
Yu Watanabe
2024-08-21 07:24:43 +09:00
parent 2656f44c3c
commit ebf66d0c05
+25 -17
View File
@@ -1463,17 +1463,26 @@ typedef struct ReconfigureData {
sd_bus_message *message;
} ReconfigureData;
static ReconfigureData* reconfigure_data_free(ReconfigureData *data) {
if (!data)
return NULL;
link_unref(data->link);
sd_bus_message_unref(data->message);
return mfree(data);
}
DEFINE_TRIVIAL_CLEANUP_FUNC(ReconfigureData*, reconfigure_data_free);
static void reconfigure_data_destroy_callback(ReconfigureData *data) {
int r;
assert(data);
assert(data->link);
assert(data->manager);
assert(data->manager->reloading > 0);
assert(data->message);
link_unref(data->link);
data->manager->reloading--;
if (data->manager->reloading <= 0) {
r = sd_bus_reply_method_return(data->message, NULL);
@@ -1481,8 +1490,7 @@ static void reconfigure_data_destroy_callback(ReconfigureData *data) {
log_warning_errno(r, "Failed to send reply for 'Reload' DBus method, ignoring: %m");
}
sd_bus_message_unref(data->message);
free(data);
reconfigure_data_free(data);
}
static int reconfigure_handler_on_bus_method_reload(sd_netlink *rtnl, sd_netlink_message *m, ReconfigureData *data) {
@@ -1493,7 +1501,7 @@ static int reconfigure_handler_on_bus_method_reload(sd_netlink *rtnl, sd_netlink
int link_reconfigure_on_bus_method_reload(Link *link, sd_bus_message *message) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
_cleanup_free_ ReconfigureData *data = NULL;
_cleanup_(reconfigure_data_freep) ReconfigureData *data = NULL;
int r;
assert(link);
@@ -1505,29 +1513,29 @@ int link_reconfigure_on_bus_method_reload(Link *link, sd_bus_message *message) {
if (IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_INITIALIZED, LINK_STATE_LINGER))
return 0;
r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_GETLINK, link->ifindex);
if (r < 0)
return r;
data = new(ReconfigureData, 1);
if (!data)
return -ENOMEM;
r = netlink_call_async(link->manager->rtnl, NULL, req,
reconfigure_handler_on_bus_method_reload,
reconfigure_data_destroy_callback, data);
if (r < 0)
return r;
*data = (ReconfigureData) {
.link = link_ref(link),
.manager = link->manager,
.message = sd_bus_message_ref(message),
};
link->manager->reloading++;
r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_GETLINK, link->ifindex);
if (r < 0)
return r;
r = netlink_call_async(link->manager->rtnl, NULL, req,
reconfigure_handler_on_bus_method_reload,
reconfigure_data_destroy_callback, data);
if (r < 0)
return r;
TAKE_PTR(data);
link->manager->reloading++;
return 0;
}