summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2013-10-23 19:04:10 +0200
committerThomas Haller <thaller@redhat.com>2013-11-09 20:32:23 +0100
commitccc912e870a342ea25220497fedc06af309cfee7 (patch)
tree5473073b3fd7e140ec4eb3cdc397b0e6f7d2f0ae
parent465458a206dcf7a568d784ff58efff4d138356eb (diff)
downloadNetworkManager-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.c7
-rw-r--r--src/rdisc/nm-rdisc.c8
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