File bnc-480091-gw_mailer_cleanup.diff of Package evolution-data-server
diff --git a/camel/providers/groupwise/camel-groupwise-folder.c b/camel/providers/groupwise/camel-groupwise-folder.c
index 54fc0f8..0699e8d 100644
--- a/camel/providers/groupwise/camel-groupwise-folder.c
+++ b/camel/providers/groupwise/camel-groupwise-folder.c
@@ -1243,13 +1243,12 @@ groupwise_refresh_folder(CamelFolder *folder, CamelException *ex)
if (!check_all && slist && g_slist_length(slist) != 0)
check_all = TRUE;
+ if (gw_store->current_folder != folder)
+ groupwise_store_set_current_folder (gw_store, folder);
+
g_slist_free (slist);
slist = NULL;
- if (gw_store->current_folder != folder) {
- gw_store->current_folder = folder;
- }
-
if (check_all && !is_proxy) {
EGwContainer *container;
int i=0;
@@ -2426,7 +2425,7 @@ groupwise_transfer_messages_to (CamelFolder *source, GPtrArray *uids,
camel_folder_summary_touch (source->summary);
camel_folder_summary_touch (destination->summary);
- gw_store->current_folder = source;
+ groupwise_store_set_current_folder (gw_store, source);
CAMEL_SERVICE_REC_UNLOCK (source->parent_store, connect_lock);
}
diff --git a/camel/providers/groupwise/camel-groupwise-store.c b/camel/providers/groupwise/camel-groupwise-store.c
index 01d8fa6..1b54358 100644
--- a/camel/providers/groupwise/camel-groupwise-store.c
+++ b/camel/providers/groupwise/camel-groupwise-store.c
@@ -258,6 +258,26 @@ check_for_connection (CamelService *service, CamelException *ex)
}
+/* resets the current folder. To just free current folder, pass NULL for folder */
+void
+groupwise_store_set_current_folder (CamelGroupwiseStore *groupwise_store, CamelFolder *folder)
+{
+
+ CAMEL_SERVICE_REC_LOCK (groupwise_store, connect_lock);
+
+ if (groupwise_store->current_folder) {
+ camel_object_unref (groupwise_store->current_folder);
+ groupwise_store->current_folder = NULL;
+ }
+
+ if (folder) {
+ camel_object_ref (folder);
+ groupwise_store->current_folder = folder;
+ }
+
+ CAMEL_SERVICE_REC_UNLOCK (groupwise_store, connect_lock);
+}
+
static gboolean
groupwise_connect (CamelService *service, CamelException *ex)
{
@@ -391,10 +411,7 @@ groupwise_disconnect (CamelService *service, gboolean clean, CamelException *ex)
groupwise_store->priv->cnc = NULL;
}
- if (groupwise_store->current_folder) {
- camel_object_unref (groupwise_store->current_folder);
- groupwise_store->current_folder = NULL;
- }
+ groupwise_store_set_current_folder (groupwise_store, NULL);
CAMEL_SERVICE_REC_UNLOCK (groupwise_store, connect_lock);
}
@@ -549,8 +566,7 @@ groupwise_get_folder (CamelStore *store, const char *folder_name, guint32 flags,
folder = groupwise_get_folder_from_disk (store, folder_name, flags, ex);
if (folder) {
- camel_object_ref (folder);
- gw_store->current_folder = folder;
+ groupwise_store_set_current_folder (gw_store, folder);
return folder;
}
@@ -558,11 +574,7 @@ groupwise_get_folder (CamelStore *store, const char *folder_name, guint32 flags,
CAMEL_SERVICE_REC_LOCK (gw_store, connect_lock);
- if (gw_store->current_folder) {
- camel_object_unref (gw_store->current_folder);
- gw_store->current_folder = NULL;
- }
-
+ groupwise_store_set_current_folder (gw_store, NULL);
if (!camel_groupwise_store_connected (gw_store, ex)) {
CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
@@ -675,8 +687,7 @@ groupwise_get_folder (CamelStore *store, const char *folder_name, guint32 flags,
camel_folder_summary_save_to_db (folder->summary, ex);
- camel_object_ref (folder);
- gw_store->current_folder = folder;
+ groupwise_store_set_current_folder (gw_store, folder);
g_free (container_id);
CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
@@ -795,7 +806,7 @@ gw_store_reload_folder (CamelGroupwiseStore *gw_store, CamelFolder *folder, guin
camel_folder_summary_save_to_db (folder->summary, ex);
- gw_store->current_folder = folder;
+ groupwise_store_set_current_folder (gw_store, NULL);
g_free (container_id);
CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
@@ -1302,10 +1313,7 @@ groupwise_delete_folder(CamelStore *store,
status = e_gw_connection_remove_item (priv->cnc, container, container);
if (status == E_GW_CONNECTION_STATUS_OK) {
- if (groupwise_store->current_folder) {
- camel_object_unref (groupwise_store->current_folder);
- groupwise_store->current_folder = NULL;
- }
+ groupwise_store_set_current_folder (groupwise_store, NULL);
groupwise_forget_folder(groupwise_store,folder_name,ex);
@@ -1342,10 +1350,7 @@ groupwise_rename_folder(CamelStore *store,
return;
}
- if (groupwise_store->current_folder) {
- camel_object_unref (groupwise_store->current_folder);
- groupwise_store->current_folder = NULL;
- }
+ groupwise_store_set_current_folder (groupwise_store, NULL);
container_id = camel_groupwise_store_container_id_lookup (groupwise_store, old_name);
temp_new = strrchr (new_name, '/');
diff --git a/camel/providers/groupwise/camel-groupwise-store.h b/camel/providers/groupwise/camel-groupwise-store.h
index adff131..b532b41 100644
--- a/camel/providers/groupwise/camel-groupwise-store.h
+++ b/camel/providers/groupwise/camel-groupwise-store.h
@@ -79,6 +79,7 @@ const char *groupwise_base_url_lookup (CamelGroupwiseStorePrivate *priv);
CamelFolderInfo * create_junk_folder (CamelStore *store);
gboolean camel_groupwise_store_connected (CamelGroupwiseStore *store, CamelException *ex);
void gw_store_reload_folder (CamelGroupwiseStore *store, CamelFolder *folder, guint32 flags, CamelException *ex);
+void groupwise_store_set_current_folder (CamelGroupwiseStore *groupwise_store, CamelFolder *folder);
G_END_DECLS