I have attached a new patch that incoporates all upstream mods and which
I've tested thoroughly. I no longer experience leaks in the exchange
connector. In my opinion, this one is good to release.
Ben
diff -urN ximian-connector-2.4.2.debian/addressbook/e-book-backend-exchange.c ximian-connector-2.4.2/addressbook/e-book-backend-exchange.c
--- ximian-connector-2.4.2.debian/addressbook/e-book-backend-exchange.c 2005-10-21 08:51:33.000000000 -0300
+++ ximian-connector-2.4.2/addressbook/e-book-backend-exchange.c 2006-02-01 07:30:49.000000000 -0400
@@ -565,6 +565,8 @@
if (status != E2K_HTTP_MULTI_STATUS) {
bepriv->connected = FALSE;
+ if (nresults)
+ e2k_results_free (results, nresults);
return GNOME_Evolution_Addressbook_OtherError;
}
@@ -576,6 +578,8 @@
if (!(access & MAPI_ACCESS_READ)) {
bepriv->connected = FALSE;
+ if (nresults)
+ e2k_results_free (results, nresults);
return GNOME_Evolution_Addressbook_PermissionDenied;
}
@@ -1385,6 +1389,8 @@
g_object_unref (book);
g_object_unref (*contact);
*contact = NULL;
+ if (nresults)
+ e2k_results_free (results, nresults);
return GNOME_Evolution_Addressbook_OtherError;
}
@@ -1393,6 +1399,7 @@
else
old_contact = NULL;
+ e2k_results_free (results, nresults);
props = props_from_contact (be, *contact, old_contact);
status = e2k_context_proppatch (bepriv->ctx, NULL, uri,
props, FALSE, NULL);
diff -urN ximian-connector-2.4.2.debian/calendar/e-cal-backend-exchange.c ximian-connector-2.4.2/calendar/e-cal-backend-exchange.c
--- ximian-connector-2.4.2.debian/calendar/e-cal-backend-exchange.c 2005-11-28 07:39:28.000000000 -0400
+++ ximian-connector-2.4.2/calendar/e-cal-backend-exchange.c 2006-02-01 07:34:39.000000000 -0400
@@ -367,6 +367,7 @@
if (prop)
access = atoi (prop);
}
+ e2k_results_free (results, nresults);
if (!(access & MAPI_ACCESS_READ)) {
g_mutex_unlock (cbex->priv->open_lock);
diff -urN ximian-connector-2.4.2.debian/debian/changelog ximian-connector-2.4.2/debian/changelog
--- ximian-connector-2.4.2.debian/debian/changelog 2006-01-31 08:57:36.000000000 -0400
+++ ximian-connector-2.4.2/debian/changelog 2006-01-31 08:29:35.000000000 -0400
@@ -1,3 +1,11 @@
+ximian-connector (2.4.2-1.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Backport memory leak fix from CVS:
+ http://bugzilla.gnome.org/attachment.cgi?id=58445&action=view
+
+ -- Ben Armstrong <[EMAIL PROTECTED]> Tue, 31 Jan 2006 08:27:27 -0400
+
ximian-connector (2.4.2-1) unstable; urgency=low
* New upstream release
diff -urN ximian-connector-2.4.2.debian/mail/mail-stub-exchange.c ximian-connector-2.4.2/mail/mail-stub-exchange.c
--- ximian-connector-2.4.2.debian/mail/mail-stub-exchange.c 2005-10-21 07:35:15.000000000 -0300
+++ ximian-connector-2.4.2/mail/mail-stub-exchange.c 2006-02-01 07:44:08.000000000 -0400
@@ -577,12 +577,16 @@
if (!background) {
got_folder_error (mfld, _("Could not open folder: Permission denied"));
}
+ if (nresults)
+ e2k_results_free (results, nresults);
return FALSE;
} else if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status)) {
g_warning ("got_folder_props: %d", status);
if (!background) {
got_folder_error (mfld, _("Could not open folder"));
}
+ if (nresults)
+ e2k_results_free (results, nresults);
return FALSE;
}
@@ -599,6 +603,7 @@
if (!background) {
got_folder_error (mfld, _("Could not open folder: Permission denied"));
}
+ e2k_results_free (results, nresults);
return FALSE;
}
readonly = (mfld->access & (MAPI_ACCESS_MODIFY | MAPI_ACCESS_CREATE_CONTENTS)) == 0;
@@ -607,6 +612,8 @@
if (prop)
mfld->deleted_count = atoi (prop);
+ e2k_results_free (results, nresults);
+
rn = e2k_restriction_andv (
e2k_restriction_prop_bool (E2K_PR_DAV_IS_COLLECTION,
E2K_RELOP_EQ, FALSE),
@@ -893,6 +900,8 @@
&results, &nresults);
if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status) || !nresults) {
+ if (nresults)
+ e2k_results_free (results, nresults);
g_warning ("got_sync_deleted_props: %d", status);
return;
}
@@ -907,6 +916,8 @@
if (prop)
visible_count = atoi (prop);
+ e2k_results_free (results, nresults);
+
if (visible_count >= mfld->messages->len) {
if (mfld->deleted_count == deleted_count)
return;
@@ -1872,6 +1883,8 @@
g_string_free (message, FALSE);
e2k_results_free (results, nresults);
}
+ else if (nresults)
+ e2k_results_free (results, nresults);
return status;
}
@@ -1891,12 +1904,16 @@
mapi_message_props,
n_mapi_message_props,
&results, &nresults);
- if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status))
+ if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status)) {
+ if (nresults)
+ e2k_results_free (results, nresults);
return status;
+ }
if (!nresults)
return E2K_HTTP_MALFORMED;
headers = mail_util_mapi_to_smtp_headers (results[0].props);
+ e2k_results_free (results, nresults);
message = g_byte_array_new ();
g_byte_array_append (message, headers, strlen (headers));
@@ -1929,12 +1946,16 @@
status = e2k_context_propfind (mse->ctx, op, uri, &prop, 1,
&results, &nresults);
- if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status))
+ if (!E2K_HTTP_STATUS_IS_SUCCESSFUL (status)) {
+ if (nresults)
+ e2k_results_free (results, nresults);
return status;
+ }
if (!nresults)
return E2K_HTTP_MALFORMED;
delegator_dn = e2k_properties_get_prop (results[0].props, PR_RCVD_REPRESENTING_EMAIL_ADDRESS);
+ e2k_results_free (results, nresults);
if (!delegator_dn)
return E2K_HTTP_OK;
diff -urN ximian-connector-2.4.2.debian/storage/exchange-config-listener.c ximian-connector-2.4.2/storage/exchange-config-listener.c
--- ximian-connector-2.4.2.debian/storage/exchange-config-listener.c 2005-09-28 10:43:54.000000000 -0300
+++ ximian-connector-2.4.2/storage/exchange-config-listener.c 2006-02-01 07:45:08.000000000 -0400
@@ -304,6 +304,7 @@
user_name = camel_url->user;
authtype = camel_url->authmech;
url_string = camel_url_to_string (camel_url, CAMEL_URL_HIDE_PASSWORD | CAMEL_URL_HIDE_PARAMS);
+ camel_url_free (camel_url);
if (!user_name)
return;