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
 
openSUSE Build Service is sponsored by