diff options
author | Jukka Rissanen <jukka.rissanen@linux.intel.com> | 2011-12-08 16:18:49 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-12-16 15:48:47 +0100 |
commit | 41ca408227aa00842dc54498513959f10c925505 (patch) | |
tree | ed696d1968f3c6e8d0b5e2f63deece13176d0aac /src/resolver.c | |
parent | 45b102f0afcb78c9434b1abde86428380e2526b6 (diff) | |
download | connman-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.c | 32 |
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; + } } |