summaryrefslogtreecommitdiff
path: root/src/resolver.c
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2011-12-08 16:18:49 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2011-12-16 15:48:47 +0100
commit41ca408227aa00842dc54498513959f10c925505 (patch)
treeed696d1968f3c6e8d0b5e2f63deece13176d0aac /src/resolver.c
parent45b102f0afcb78c9434b1abde86428380e2526b6 (diff)
downloadconnman-41ca408227aa00842dc54498513959f10c925505.tar.gz
connman-41ca408227aa00842dc54498513959f10c925505.tar.bz2
connman-41ca408227aa00842dc54498513959f10c925505.zip
resolver: Fix memory leak when resolver is stopped
Diffstat (limited to 'src/resolver.c')
-rw-r--r--src/resolver.c32
1 files changed, 32 insertions, 0 deletions
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;
+ }
}