summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSushma Rai <rsushma@src.gnome.org>2005-05-17 06:11:19 +0000
committerSushma Rai <rsushma@src.gnome.org>2005-05-17 06:11:19 +0000
commit295d663670c5a0afd766c3fa446913c64842f6c2 (patch)
tree906caaa0de40a548b1a08fc09b0f0ea581ba1b1d
parent5d3f4515db89655c960b37d6a385e4caefaa8185 (diff)
downloadevolution-data-server-295d663670c5a0afd766c3fa446913c64842f6c2.tar.gz
Fix for memory leaks in cache handling code.
-rw-r--r--addressbook/ChangeLog8
-rw-r--r--addressbook/libedata-book/e-book-backend-cache.c17
2 files changed, 19 insertions, 6 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 6e2a82641..53615b5b4 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,11 @@
+2005-05-17 Sushma Rai <rsushma@novell.com>
+
+ * libedata-book/e-book-backend-cache.c
+ (e_book_backend_cache_get_contacts): Freeing list of cache objects and
+ sexp.
+ (e_book_backend_cache_search): Freeing list of contacts matching the
+ query.
+
2005-04-27 Sushma Rai <rsushma@novell.com>
* libebook/e-book.c (e_book_response_add_contact): Setting the status
diff --git a/addressbook/libedata-book/e-book-backend-cache.c b/addressbook/libedata-book/e-book-backend-cache.c
index d9b2333ad..342b5232a 100644
--- a/addressbook/libedata-book/e-book-backend-cache.c
+++ b/addressbook/libedata-book/e-book-backend-cache.c
@@ -332,6 +332,7 @@ e_book_backend_cache_get_contacts (EBookBackendCache *cache, const char *query)
EContact *contact;
EBookBackendSExp *sexp = NULL;
const char *uid;
+
g_return_val_if_fail (E_IS_BOOK_BACKEND_CACHE (cache), NULL);
if (query) {
sexp = e_book_backend_sexp_new (query);
@@ -341,8 +342,7 @@ e_book_backend_cache_get_contacts (EBookBackendCache *cache, const char *query)
l = e_file_cache_get_objects (E_FILE_CACHE (cache));
- if (!l)
- return NULL;
+
for ( ; l != NULL; l = g_slist_next (l)) {
vcard_str = l->data;
if (vcard_str && !strncmp (vcard_str, "BEGIN:VCARD", 11)) {
@@ -353,6 +353,10 @@ e_book_backend_cache_get_contacts (EBookBackendCache *cache, const char *query)
}
}
+ if (l)
+ g_slist_free (l);
+ if (sexp)
+ g_object_unref (sexp);
return list;
}
@@ -367,12 +371,13 @@ e_book_backend_cache_search (EBookBackendCache *cache, const char *query)
ptr_array = g_ptr_array_new ();
temp = matching_contacts;
- for (; matching_contacts != NULL; matching_contacts = g_list_next (matching_contacts))
+ for (; matching_contacts != NULL; matching_contacts = g_list_next (matching_contacts)) {
g_ptr_array_add (ptr_array, e_contact_get (matching_contacts->data, E_CONTACT_UID));
-
- return ptr_array;
+ g_object_unref (matching_contacts->data);
+ }
+ g_list_free (temp);
-
+ return ptr_array;
}
gboolean