diff options
author | Thomas Haller <thaller@redhat.com> | 2016-11-10 08:53:17 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-11-10 09:30:05 +0100 |
commit | de52c25cfd6b452e7529ec222c5d8eacd2466aab (patch) | |
tree | f92ad9c7121f64e3747fe1827ba8adf41794edd7 /src | |
parent | 2b304d82d77a6caac6fa578bd0be33e817a90be0 (diff) | |
download | NetworkManager-de52c25cfd6b452e7529ec222c5d8eacd2466aab.tar.gz |
device: refactor ndisc_set_router_config()
- only record @now timestamp if we actually need it.
- use gint32 for @now. It seems wrong that NMNDiscDNSServer
uses guint32 for the timestamp. We keep
nm_utils_get_monotonic_timestamp_s() as gint32 for a reason.
- ensure the arrays are initialized to zero. E.g.
ndisc_addr->dad_counter was uninitalized.
- set the size for arrays outside the loop
- use g_array_unref(). I think that is usually better. It makes
only a difference when somebody else holds a reference to the
array. And in that case, it usually seems better not to clear
the array, just release your refrence.
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/nm-device.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index e34bc1d3a9..f208143f15 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -1821,16 +1821,17 @@ static void ndisc_set_router_config (NMNDisc *ndisc, NMDevice *self) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); - guint32 now = nm_utils_get_monotonic_timestamp_s (); + gint32 now; GArray *addresses, *dns_servers, *dns_domains; guint len, i; if (nm_ndisc_get_node_type (ndisc) != NM_NDISC_NODE_TYPE_ROUTER) return; - /* Addresses whose prefixes we announce. */ + now = nm_utils_get_monotonic_timestamp_s (); + len = nm_ip6_config_get_num_addresses (priv->ip6_config); - addresses = g_array_sized_new (FALSE, FALSE, sizeof (NMNDiscAddress), len); + addresses = g_array_sized_new (FALSE, TRUE, sizeof (NMNDiscAddress), len); for (i = 0; i < len; i++) { const NMPlatformIP6Address *addr = nm_ip6_config_get_address (priv->ip6_config, i); NMNDiscAddress *ndisc_addr; @@ -1853,28 +1854,26 @@ ndisc_set_router_config (NMNDisc *ndisc, NMDevice *self) ndisc_addr->preferred = addr->preferred; } - /* DNS servers. */ len = nm_ip6_config_get_num_nameservers (priv->ip6_config); - dns_servers = g_array_sized_new (FALSE, FALSE, sizeof (NMNDiscDNSServer), len); + dns_servers = g_array_sized_new (FALSE, TRUE, sizeof (NMNDiscDNSServer), len); + g_array_set_size (dns_servers, len); for (i = 0; i < len; i++) { const struct in6_addr *nameserver = nm_ip6_config_get_nameserver (priv->ip6_config, i); NMNDiscDNSServer *ndisc_nameserver; - g_array_set_size (dns_servers, dns_servers->len+1); ndisc_nameserver = &g_array_index (dns_servers, NMNDiscDNSServer, dns_servers->len-1); ndisc_nameserver->address = *nameserver; ndisc_nameserver->timestamp = now; ndisc_nameserver->lifetime = NM_NDISC_ROUTER_LIFETIME; } - /* DNS domains. */ len = nm_ip6_config_get_num_searches (priv->ip6_config); - dns_domains = g_array_sized_new (FALSE, FALSE, sizeof (NMNDiscDNSDomain), len); + dns_domains = g_array_sized_new (FALSE, TRUE, sizeof (NMNDiscDNSDomain), len); + g_array_set_size (dns_domains, len); for (i = 0; i < len; i++) { const char *search = nm_ip6_config_get_search (priv->ip6_config, i); NMNDiscDNSDomain *ndisc_search; - g_array_set_size (dns_domains, dns_domains->len+1); ndisc_search = &g_array_index (dns_domains, NMNDiscDNSDomain, dns_domains->len-1); ndisc_search->domain = g_strdup (search); ndisc_search->timestamp = now; @@ -1882,9 +1881,9 @@ ndisc_set_router_config (NMNDisc *ndisc, NMDevice *self) } nm_ndisc_set_config (ndisc, addresses, dns_servers, dns_domains); - g_array_free (addresses, TRUE); - g_array_free (dns_servers, TRUE); - g_array_free (dns_domains, TRUE); + g_array_unref (addresses); + g_array_unref (dns_servers); + g_array_unref (dns_domains); } static gboolean |