From: Yu Watanabe Date: Mon, 10 Jul 2023 01:27:09 +0000 (+0900) Subject: network/queue: free assigned userdata only when a new request is queued X-Git-Tag: v255-rc1~889^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d256945fd04bad1d4eaa4443358b3f7c68ad78f2;p=thirdparty%2Fsystemd.git network/queue: free assigned userdata only when a new request is queued --- diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 2c3b0f87979..bc82bf3e8d1 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -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) { diff --git a/src/network/networkd-queue.c b/src/network/networkd-queue.c index cf2ffa0327e..d5193538d89 100644 --- a/src/network/networkd-queue.c +++ b/src/network/networkd-queue.c @@ -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)++;