]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/queue: free assigned userdata only when a new request is queued
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 10 Jul 2023 01:27:09 +0000 (10:27 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 29 Jul 2023 14:27:19 +0000 (23:27 +0900)
src/network/netdev/netdev.c
src/network/networkd-queue.c

index 2c3b0f87979a62a6c1d6472f8c2aba0c2c0e0d1d..bc82bf3e8d19ab8752a87297becce9fa5c8ee269 100644 (file)
@@ -702,7 +702,7 @@ int link_request_stacked_netdev(Link *link, NetDev *netdev) {
 
         link->stacked_netdevs_created = false;
         r = link_queue_request_full(link, REQUEST_TYPE_NETDEV_STACKED,
-                                    netdev_ref(netdev), (mfree_func_t) netdev_unref,
+                                    netdev, (mfree_func_t) netdev_unref,
                                     trivial_hash_func, trivial_compare_func,
                                     stacked_netdev_process_request,
                                     &link->create_stacked_netdev_messages,
@@ -710,9 +710,12 @@ int link_request_stacked_netdev(Link *link, NetDev *netdev) {
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to request stacked netdev '%s': %m",
                                             netdev->ifname);
+        if (r == 0)
+                return 0;
 
+        netdev_ref(netdev);
         log_link_debug(link, "Requested stacked netdev '%s'", netdev->ifname);
-        return 0;
+        return 1;
 }
 
 static int independent_netdev_process_request(Request *req, Link *link, void *userdata) {
index cf2ffa0327eaae13e9aa4f87cb68c6fcee7f83c2..d5193538d899075378d36740696c2f94663385f5 100644 (file)
@@ -134,7 +134,6 @@ static int request_new(
                 .link = link_ref(link), /* link may be NULL, but link_ref() handles it gracefully. */
                 .type = type,
                 .userdata = userdata,
-                .free_func = free_func,
                 .hash_func = hash_func,
                 .compare_func = compare_func,
                 .process = process,
@@ -153,6 +152,7 @@ static int request_new(
                 return r;
 
         req->manager = manager;
+        req->free_func = free_func;
         req->counter = counter;
         if (req->counter)
                 (*req->counter)++;