diff options
author | Thomas Haller <thaller@redhat.com> | 2013-10-23 19:04:10 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2013-11-09 20:32:23 +0100 |
commit | ccc912e870a342ea25220497fedc06af309cfee7 (patch) | |
tree | 5473073b3fd7e140ec4eb3cdc397b0e6f7d2f0ae | |
parent | 465458a206dcf7a568d784ff58efff4d138356eb (diff) | |
download | NetworkManager-ccc912e870a342ea25220497fedc06af309cfee7.tar.gz |
rdisc: cleanup handling of NMRDisc->lladdr field
Release the previous instance when setting the lladdr property
and unref it in the desctructor.
Signed-off-by: Thomas Haller <thaller@redhat.com>
-rw-r--r-- | src/rdisc/nm-lndp-rdisc.c | 7 | ||||
-rw-r--r-- | src/rdisc/nm-rdisc.c | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/rdisc/nm-lndp-rdisc.c b/src/rdisc/nm-lndp-rdisc.c index 14287c134f..abcc3c2d01 100644 --- a/src/rdisc/nm-lndp-rdisc.c +++ b/src/rdisc/nm-lndp-rdisc.c @@ -426,13 +426,16 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data) NMRDisc *rdisc = (NMRDisc *) user_data; NMLNDPRDiscPrivate *priv = NM_LNDP_RDISC_GET_PRIVATE (rdisc); NMRDiscConfigMap changed = 0; - size_t lladdrlen; - const char *lladdr = g_bytes_get_data (rdisc->lladdr, &lladdrlen); + size_t lladdrlen = 0; + const char *lladdr = NULL; struct ndp_msgra *msgra = ndp_msgra (msg); NMRDiscGateway gateway; guint32 now = get_time (); int offset; + if (rdisc->lladdr) + lladdr = g_bytes_get_data (rdisc->lladdr, &lladdrlen); + /* Router discovery is subject to the following RFC documents: * * http://tools.ietf.org/html/rfc4861 diff --git a/src/rdisc/nm-rdisc.c b/src/rdisc/nm-rdisc.c index 4ff44b248b..68fbea3f7e 100644 --- a/src/rdisc/nm-rdisc.c +++ b/src/rdisc/nm-rdisc.c @@ -41,7 +41,9 @@ static guint signals[LAST_SIGNAL] = { 0 }; void nm_rdisc_set_lladdr (NMRDisc *rdisc, const char *addr, size_t addrlen) { - rdisc->lladdr = g_bytes_new (addr, addrlen); + if (rdisc->lladdr) + g_bytes_unref (rdisc->lladdr); + rdisc->lladdr = addr ? g_bytes_new (addr, addrlen) : NULL; } void @@ -145,6 +147,7 @@ nm_rdisc_init (NMRDisc *rdisc) rdisc->routes = g_array_new (FALSE, FALSE, sizeof (NMRDiscRoute)); rdisc->dns_servers = g_array_new (FALSE, FALSE, sizeof (NMRDiscDNSServer)); rdisc->dns_domains = g_array_new (FALSE, FALSE, sizeof (NMRDiscDNSDomain)); + rdisc->lladdr = NULL; } static void @@ -158,6 +161,9 @@ nm_rdisc_finalize (GObject *object) g_array_unref (rdisc->routes); g_array_unref (rdisc->dns_servers); g_array_unref (rdisc->dns_domains); + + if (rdisc->lladdr) + g_bytes_unref (rdisc->lladdr); } static void |