File bnc-467638-current-folder.patch of Package evolution-data-server

diff --git a/camel/providers/groupwise/camel-groupwise-store.c b/camel/providers/groupwise/camel-groupwise-store.c
index 21ef627..01d8fa6 100644
--- a/camel/providers/groupwise/camel-groupwise-store.c
+++ b/camel/providers/groupwise/camel-groupwise-store.c
@@ -390,6 +390,12 @@ groupwise_disconnect (CamelService *service, gboolean clean, CamelException *ex)
 			g_object_unref (groupwise_store->priv->cnc);
 			groupwise_store->priv->cnc = NULL;
 		}
+
+		if (groupwise_store->current_folder) {
+			camel_object_unref (groupwise_store->current_folder);
+			groupwise_store->current_folder = NULL;
+		}
+
 		CAMEL_SERVICE_REC_UNLOCK (groupwise_store, connect_lock);
 	}
 	
@@ -544,6 +550,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;
 		return folder;
 	}
 
@@ -551,16 +558,17 @@ groupwise_get_folder (CamelStore *store, const char *folder_name, guint32 flags,
 
 	CAMEL_SERVICE_REC_LOCK (gw_store, connect_lock);
 
-	if (!camel_groupwise_store_connected (gw_store, ex)) {
-		CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
-		return NULL;
-	}
-	
 	if (gw_store->current_folder) {
 		camel_object_unref (gw_store->current_folder);
 		gw_store->current_folder = NULL;
 	}
 
+
+	if (!camel_groupwise_store_connected (gw_store, ex)) {
+		CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
+		return NULL;
+	}
+	
 	if (!E_IS_GW_CONNECTION( priv->cnc)) {
 		if (!groupwise_connect (CAMEL_SERVICE(store), ex)) {
 			CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
@@ -667,8 +675,8 @@ groupwise_get_folder (CamelStore *store, const char *folder_name, guint32 flags,
 
 	camel_folder_summary_save_to_db (folder->summary, ex);
 
-	gw_store->current_folder = folder;
 	camel_object_ref (folder);
+	gw_store->current_folder = folder;
 
 	g_free (container_id);
 	CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
@@ -1294,8 +1302,10 @@ 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)
+		if (groupwise_store->current_folder) {
 			camel_object_unref (groupwise_store->current_folder);
+			groupwise_store->current_folder = NULL;
+		}
 
 		groupwise_forget_folder(groupwise_store,folder_name,ex);
 
@@ -1332,6 +1342,11 @@ groupwise_rename_folder(CamelStore *store,
 		return;
 	}
 
+	if (groupwise_store->current_folder) {
+		camel_object_unref (groupwise_store->current_folder);
+		groupwise_store->current_folder = NULL;
+	}
+
 	container_id = camel_groupwise_store_container_id_lookup (groupwise_store, old_name);
 	temp_new = strrchr (new_name, '/');
 	if (temp_new)
@@ -1587,6 +1602,7 @@ camel_groupwise_store_init (gpointer object, gpointer klass)
 	priv->user = NULL;
 	priv->cnc = NULL;
 	groupwise_store->priv = priv;
+	groupwise_store->current_folder = NULL;
 	
 }
 
openSUSE Build Service is sponsored by