** Memory leak fixes from bug #440524
authorSrinivasa Ragavan <sragavan@src.gnome.org>
Sun, 3 Jun 2007 13:04:08 +0000 (13:04 +0000)
committerSrinivasa Ragavan <sragavan@src.gnome.org>
Sun, 3 Jun 2007 13:04:08 +0000 (13:04 +0000)
svn path=/trunk/; revision=7798

addressbook/ChangeLog
addressbook/backends/file/e-book-backend-file.c
addressbook/backends/groupwise/e-book-backend-groupwise.c
addressbook/libedata-book/e-book-backend-db-cache.c
addressbook/libedata-book/e-book-backend-summary.c

index e24a00c..8a56fad 100644 (file)
@@ -1,3 +1,19 @@
+2007-06-03  Srinivasa Ragavan  <sragavan@novell.com>
+
+       ** Memory leak fixes from bug #440524
+
+       * backends/file/e-book-backend-file.c: (book_view_thread):
+       * backends/groupwise/e-book-backend-groupwise.c: (update_cache),
+       (update_address_book_deltas),
+       (e_book_backend_groupwise_authenticate_user),
+       (e_book_backend_groupwise_load_source):
+       * libedata-book/e-book-backend-db-cache.c:
+       (e_book_backend_db_cache_get_contact),
+       (e_book_backend_db_cache_get_contacts),
+       (e_book_backend_db_cache_exists):
+       * libedata-book/e-book-backend-summary.c:
+       (e_book_backend_summary_load):
+
 2007-05-31  Matthew Barnes  <mbarnes@redhat.com>
 
        * libebook/Makefile.am:
index a0f0c06..229342e 100644 (file)
@@ -589,6 +589,7 @@ book_view_thread (gpointer data)
 
                        if (db_error == 0) {
                                e_data_book_view_notify_update_prefiltered_vcard (book_view, id, vcard_dbt.data);
+                               g_free (vcard_dbt.data);
                        }
                        else {
                                g_warning (G_STRLOC ": db->get failed with %s", db_strerror (db_error));
@@ -624,6 +625,7 @@ book_view_thread (gpointer data)
                                                e_data_book_view_notify_update_prefiltered_vcard (book_view, id_dbt.data, vcard_dbt.data);
                                        else
                                                e_data_book_view_notify_update_vcard (book_view, vcard_dbt.data);
+                                       g_free (vcard_dbt.data);
                                } else {
                                        g_free (vcard_dbt.data);
                                }
index 3328afe..faff48b 100644 (file)
@@ -2818,6 +2818,7 @@ update_cache (EBookBackendGroupwise *ebgw)
 
        cache_file_name = e_book_backend_db_cache_get_filename(ebgw->priv->file_db);
        g_stat (cache_file_name, &buf);
+       g_free (cache_file_name);
        mod_time = buf.st_mtime;
        tm = gmtime (&mod_time);
        strftime (cache_time_string, 100, "%Y-%m-%dT%H:%M:%SZ", tm);
@@ -2914,7 +2915,7 @@ update_address_book_deltas (EBookBackendGroupwise *ebgw)
 
        GTimeVal start, end;
        unsigned long diff;
-       const char *cache_file_name;
+       char *cache_file_name;
        struct stat buf;
        time_t mod_time;
 
@@ -2993,6 +2994,7 @@ update_address_book_deltas (EBookBackendGroupwise *ebgw)
        /* load summary file */
        cache_file_name = e_book_backend_db_cache_get_filename(ebgw->priv->file_db);
        g_stat (cache_file_name, &buf);
+       g_free (cache_file_name);
        mod_time = buf.st_mtime;
        if (e_book_backend_summary_load (ebgw->priv->summary) == FALSE || 
            e_book_backend_summary_is_up_to_date (ebgw->priv->summary, mod_time) == FALSE) {
@@ -3018,6 +3020,8 @@ update_address_book_deltas (EBookBackendGroupwise *ebgw)
                                add_sequence_to_cache (priv->file_db, server_first_sequence, 
                                       server_last_sequence, server_last_po_rebuild_time);
                                g_mutex_unlock (priv->update_mutex);
+                               g_free (sequence);
+                               g_free (count);
                                return TRUE;
                        }
                        sync_required = TRUE;
@@ -3181,7 +3185,7 @@ e_book_backend_groupwise_authenticate_user (EBookBackend *backend,
 {
        EBookBackendGroupwise *ebgw;
        EBookBackendGroupwisePrivate *priv;
-       char *id;
+       char *id, *tmpfile;
        int status;
        char *http_uri;
        gboolean is_writable;
@@ -3263,7 +3267,9 @@ e_book_backend_groupwise_authenticate_user (EBookBackend *backend,
                }
 
                /* initialize summary file */
-               g_mkdir_with_parents (g_path_get_dirname (priv->summary_file_name), 0700);
+               tmpfile = g_path_get_dirname (priv->summary_file_name);
+               g_mkdir_with_parents (tmpfile, 0700);
+               g_free (tmpfile);
                priv->summary = e_book_backend_summary_new (priv->summary_file_name, 
                                                            SUMMARY_FLUSH_TIMEOUT);
 
@@ -3411,7 +3417,7 @@ e_book_backend_groupwise_load_source (EBookBackend           *backend,
 {
        EBookBackendGroupwise *ebgw;
        EBookBackendGroupwisePrivate *priv;
-       char *dirname, *filename;
+       char *dirname, *filename, *tmp;
         char *book_name;
         char *uri;
        char **tokens;
@@ -3491,8 +3497,9 @@ e_book_backend_groupwise_load_source (EBookBackend           *backend,
        }
 
         g_free (priv->summary_file_name);
-       priv->summary_file_name = g_build_filename (g_get_home_dir(), ".evolution/addressbook" , uri, priv->book_name, NULL);
-        priv->summary_file_name = g_strconcat (ebgw->priv->summary_file_name, ".summary", NULL);
+       tmp = g_build_filename (g_get_home_dir(), ".evolution/addressbook" , uri, priv->book_name, NULL);
+        priv->summary_file_name = g_strconcat (tmp, ".summary", NULL);
+       g_free (tmp);
 
        dirname = g_build_filename (g_get_home_dir(), ".evolution/cache/addressbook", uri, priv->book_name, NULL);
        filename = g_build_filename (dirname, "cache.db", NULL);
index fe6214a..c13b9a7 100644 (file)
@@ -133,7 +133,7 @@ e_book_backend_db_cache_get_contact (DB *db, const char *uid)
 {
        DBT        uid_dbt, vcard_dbt;
        int        db_error;
-       const char *vcard_str;
+       EContact *contact = NULL;
 
        g_return_val_if_fail (uid != NULL, NULL);
 
@@ -147,10 +147,9 @@ e_book_backend_db_cache_get_contact (DB *db, const char *uid)
                return NULL;
        }
        
-       vcard_str = g_strdup (vcard_dbt.data);
+       contact = e_contact_new_from_vcard ((const char *)vcard_dbt.data);
        g_free (vcard_dbt.data);
-       
-       return e_contact_new_from_vcard (vcard_str);
+       return contact;
 }
 
 /**
@@ -296,10 +295,13 @@ e_book_backend_db_cache_get_contacts (DB *db, const char *query)
        db_error = dbc->c_get(dbc, &uid_dbt, &vcard_dbt, DB_FIRST);
 
        while(db_error == 0) {
-               if (vcard_dbt.data && !strncmp (vcard_dbt.data, "BEGIN:VCARD", 11))
-               if (e_book_backend_sexp_match_vcard(sexp, vcard_dbt.data)) {
+               if (vcard_dbt.data && !strncmp (vcard_dbt.data, "BEGIN:VCARD", 11)) {
                        contact = e_contact_new_from_vcard (vcard_dbt.data);
-                       list = g_list_append (list, contact);
+
+                       if (e_book_backend_sexp_match_contact(sexp, contact))
+                               list = g_list_prepend (list, contact);
+                       else
+                               g_object_unref (contact);
                }
                db_error = dbc->c_get (dbc, &uid_dbt, &vcard_dbt, DB_NEXT);
        }
@@ -311,7 +313,7 @@ e_book_backend_db_cache_get_contacts (DB *db, const char *query)
        if (sexp)
                g_object_unref (sexp);
 
-        return list;
+        return g_list_reverse (list);
 }
 
 /**
@@ -359,11 +361,11 @@ e_book_backend_db_cache_exists (const char *uri)
        gboolean exists = FALSE;
        file_name = get_filename_from_uri (uri);
        
-       if (file_name && g_file_test (file_name, G_FILE_TEST_EXISTS)) {
+       if (file_name && g_file_test (file_name, G_FILE_TEST_EXISTS))
                exists = TRUE;
-               g_free (file_name);
-       }
-       
+
+       g_free (file_name);
+
        return exists;
 }
 
index efe5811..71bee75 100644 (file)
@@ -529,6 +529,8 @@ e_book_backend_summary_load (EBookBackendSummary *summary)
        EBookBackendSummaryItem *new_item;
        int i;
        
+       clear_items (summary);
+
        if (!e_book_backend_summary_open (summary))
                return FALSE;