diff options
| author | Sushma Rai <rsushma@src.gnome.org> | 2005-05-17 06:11:19 +0000 |
|---|---|---|
| committer | Sushma Rai <rsushma@src.gnome.org> | 2005-05-17 06:11:19 +0000 |
| commit | 295d663670c5a0afd766c3fa446913c64842f6c2 (patch) | |
| tree | 906caaa0de40a548b1a08fc09b0f0ea581ba1b1d | |
| parent | 5d3f4515db89655c960b37d6a385e4caefaa8185 (diff) | |
| download | evolution-data-server-295d663670c5a0afd766c3fa446913c64842f6c2.tar.gz | |
Fix for memory leaks in cache handling code.
| -rw-r--r-- | addressbook/ChangeLog | 8 | ||||
| -rw-r--r-- | addressbook/libedata-book/e-book-backend-cache.c | 17 |
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 |
