]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp-client: introduce dhcp_lease_unref_and_replace()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 20 Sep 2023 19:37:18 +0000 (04:37 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 22 Sep 2023 16:38:21 +0000 (01:38 +0900)
src/libsystemd-network/dhcp-lease-internal.h
src/libsystemd-network/sd-dhcp-client.c

index 04a98938761156f840b3ddfcf19f1febf4a82985..7c20e52209bef1a47bc74bd8730eed3f615cf672 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "sd-dhcp-client.h"
 
+#include "alloc-util.h"
 #include "dhcp-internal.h"
 #include "dhcp-protocol.h"
 #include "list.h"
@@ -90,3 +91,6 @@ int dhcp_lease_insert_private_option(sd_dhcp_lease *lease, uint8_t tag, const vo
 int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease *lease);
 
 int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const void *client_id, size_t client_id_len);
+
+#define dhcp_lease_unref_and_replace(a, b)                              \
+        unref_and_replace_full(a, b, sd_dhcp_lease_ref, sd_dhcp_lease_unref)
index 9490db9c9781c8b619158b37512247dbb79df670..e3f637736ececbd8578628f287725ebb02b81a68 100644 (file)
@@ -1584,14 +1584,12 @@ static int client_handle_offer(sd_dhcp_client *client, DHCPMessage *offer, size_
                 return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(ENOMSG),
                                              "received lease lacks subnet mask, and a fallback one cannot be generated, ignoring.");
 
-        sd_dhcp_lease_unref(client->lease);
-        client->lease = TAKE_PTR(lease);
+        dhcp_lease_unref_and_replace(client->lease, lease);
 
         if (client_notify(client, SD_DHCP_CLIENT_EVENT_SELECTING) < 0)
                 return -ENOMSG;
 
         log_dhcp_client(client, "OFFER");
-
         return 0;
 }
 
@@ -1686,20 +1684,16 @@ static int client_handle_ack(sd_dhcp_client *client, DHCPMessage *ack, size_t le
                 return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(ENOMSG),
                                              "received lease lacks subnet mask, and a fallback one cannot be generated, ignoring.");
 
-        r = SD_DHCP_CLIENT_EVENT_IP_ACQUIRE;
-        if (client->lease) {
-                if (lease_equal(client->lease, lease))
-                        r = SD_DHCP_CLIENT_EVENT_RENEW;
-                else
-                        r = SD_DHCP_CLIENT_EVENT_IP_CHANGE;
-
-                client->lease = sd_dhcp_lease_unref(client->lease);
-        }
+        if (!client->lease)
+                r = SD_DHCP_CLIENT_EVENT_IP_ACQUIRE;
+        else if (lease_equal(client->lease, lease))
+                r = SD_DHCP_CLIENT_EVENT_RENEW;
+        else
+                r = SD_DHCP_CLIENT_EVENT_IP_CHANGE;
 
-        client->lease = TAKE_PTR(lease);
+        dhcp_lease_unref_and_replace(client->lease, lease);
 
         log_dhcp_client(client, "ACK");
-
         return r;
 }