From 41ca408227aa00842dc54498513959f10c925505 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Thu, 8 Dec 2011 16:18:49 +0200 Subject: resolver: Fix memory leak when resolver is stopped --- src/resolver.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/resolver.c') diff --git a/src/resolver.c b/src/resolver.c index 29871e10..f5674145 100644 --- a/src/resolver.c +++ b/src/resolver.c @@ -494,6 +494,24 @@ void connman_resolver_flush(void) return; } +static void free_entry(gpointer data) +{ + struct entry_data *entry = data; + g_free(entry->interface); + g_free(entry->domain); + g_free(entry->server); + g_free(entry); +} + +static void free_resolvfile(gpointer data) +{ + struct resolvfile_entry *entry = data; + g_free(entry->interface); + g_free(entry->domain); + g_free(entry->server); + g_free(entry); +} + int __connman_resolver_init(connman_bool_t dnsproxy) { DBG("dnsproxy %d", dnsproxy); @@ -517,4 +535,18 @@ void __connman_resolver_cleanup(void) if (dnsproxy_enabled == TRUE) __connman_dnsproxy_cleanup(); + else { + GList *list; + GSList *slist; + + for (list = resolvfile_list; list; list = g_list_next(list)) + free_resolvfile(list->data); + g_list_free(resolvfile_list); + resolvfile_list = NULL; + + for (slist = entry_list; slist; slist = g_slist_next(slist)) + free_entry(slist->data); + g_slist_free(entry_list); + entry_list = NULL; + } } -- cgit v1.2.3