]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce reconfigure_data_free() and _freep()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 20 Aug 2024 22:17:19 +0000 (07:17 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 20 Aug 2024 22:24:43 +0000 (07:24 +0900)
No functional change, just refactoring.

src/network/networkd-link.c

index 7dcc641d7e027fd96eefa19291e603dd8bfd912e..3940aa79b37e64ac2d179a4e86e492c54f706027 100644 (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;
 }