1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-09 12:58:26 +03:00

sd-dhcp-client: introduce dhcp_lease_unref_and_replace()

This commit is contained in:
Yu Watanabe 2023-09-21 04:37:18 +09:00
parent 8fc725052a
commit db849df5a1
2 changed files with 12 additions and 14 deletions

View File

@ -7,6 +7,7 @@
#include "sd-dhcp-client.h" #include "sd-dhcp-client.h"
#include "alloc-util.h"
#include "dhcp-internal.h" #include "dhcp-internal.h"
#include "dhcp-protocol.h" #include "dhcp-protocol.h"
#include "list.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_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); 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)

View 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), return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(ENOMSG),
"received lease lacks subnet mask, and a fallback one cannot be generated, ignoring."); "received lease lacks subnet mask, and a fallback one cannot be generated, ignoring.");
sd_dhcp_lease_unref(client->lease); dhcp_lease_unref_and_replace(client->lease, lease);
client->lease = TAKE_PTR(lease);
if (client_notify(client, SD_DHCP_CLIENT_EVENT_SELECTING) < 0) if (client_notify(client, SD_DHCP_CLIENT_EVENT_SELECTING) < 0)
return -ENOMSG; return -ENOMSG;
log_dhcp_client(client, "OFFER"); log_dhcp_client(client, "OFFER");
return 0; 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), return log_dhcp_client_errno(client, SYNTHETIC_ERRNO(ENOMSG),
"received lease lacks subnet mask, and a fallback one cannot be generated, ignoring."); "received lease lacks subnet mask, and a fallback one cannot be generated, ignoring.");
r = SD_DHCP_CLIENT_EVENT_IP_ACQUIRE; if (!client->lease)
if (client->lease) { r = SD_DHCP_CLIENT_EVENT_IP_ACQUIRE;
if (lease_equal(client->lease, lease)) else if (lease_equal(client->lease, lease))
r = SD_DHCP_CLIENT_EVENT_RENEW; r = SD_DHCP_CLIENT_EVENT_RENEW;
else else
r = SD_DHCP_CLIENT_EVENT_IP_CHANGE; r = SD_DHCP_CLIENT_EVENT_IP_CHANGE;
client->lease = sd_dhcp_lease_unref(client->lease); dhcp_lease_unref_and_replace(client->lease, lease);
}
client->lease = TAKE_PTR(lease);
log_dhcp_client(client, "ACK"); log_dhcp_client(client, "ACK");
return r; return r;
} }