Blame SOURCES/evolution-ews-3.28.5-double-collection-backend-populate.patch

ae7d88
From f50530ad101b47d461a345ff2b8b295b86c05d3a Mon Sep 17 00:00:00 2001
ae7d88
From: Milan Crha <mcrha@redhat.com>
ae7d88
Date: Thu, 27 Sep 2018 10:51:05 +0200
ae7d88
Subject: Collection backend schedules two 'populate' requests after going
ae7d88
 online
ae7d88
ae7d88
ECollectionBackend base class makes sure the 'populate' method is called
ae7d88
after the backend itself goes online, thus there is no need to schedule
ae7d88
it in the descendant again.
ae7d88
ae7d88
Related to https://gitlab.gnome.org/GNOME/evolution-data-server/issues/36
ae7d88
ae7d88
diff --git a/src/collection/e-ews-backend.c b/src/collection/e-ews-backend.c
ae7d88
index 651694b7..d9a973af 100644
ae7d88
--- a/src/collection/e-ews-backend.c
ae7d88
+++ b/src/collection/e-ews-backend.c
ae7d88
@@ -48,7 +48,7 @@ struct _EEwsBackendPrivate {
ae7d88
 
ae7d88
 	gboolean need_update_folders;
ae7d88
 
ae7d88
-	gulong notify_online_id;
ae7d88
+	gulong source_changed_id;
ae7d88
 };
ae7d88
 
ae7d88
 struct _SyncFoldersClosure {
ae7d88
@@ -647,15 +647,21 @@ static void
ae7d88
 ews_backend_dispose (GObject *object)
ae7d88
 {
ae7d88
 	EEwsBackendPrivate *priv;
ae7d88
+	ESource *source;
ae7d88
 
ae7d88
 	priv = E_EWS_BACKEND_GET_PRIVATE (object);
ae7d88
 
ae7d88
+	source = e_backend_get_source (E_BACKEND (object));
ae7d88
+	if (source && priv->source_changed_id) {
ae7d88
+		g_signal_handler_disconnect (source, priv->source_changed_id);
ae7d88
+		priv->source_changed_id = 0;
ae7d88
+	}
ae7d88
+
ae7d88
 	g_hash_table_remove_all (priv->folders);
ae7d88
 
ae7d88
-	if (priv->connection != NULL) {
ae7d88
-		g_object_unref (priv->connection);
ae7d88
-		priv->connection = NULL;
ae7d88
-	}
ae7d88
+	g_mutex_lock (&priv->connection_lock);
ae7d88
+	g_clear_object (&priv->connection);
ae7d88
+	g_mutex_unlock (&priv->connection_lock);
ae7d88
 
ae7d88
 	/* Chain up to parent's dispose() method. */
ae7d88
 	G_OBJECT_CLASS (e_ews_backend_parent_class)->dispose (object);
ae7d88
@@ -770,12 +776,8 @@ ews_backend_populate (ECollectionBackend *backend)
ae7d88
 
ae7d88
 	ews_backend->priv->need_update_folders = TRUE;
ae7d88
 
ae7d88
-	if (!ews_backend->priv->notify_online_id) {
ae7d88
-		ews_backend->priv->notify_online_id = g_signal_connect (
ae7d88
-			backend, "notify::online",
ae7d88
-			G_CALLBACK (ews_backend_populate), NULL);
ae7d88
-
ae7d88
-		g_signal_connect (
ae7d88
+	if (!ews_backend->priv->source_changed_id) {
ae7d88
+		ews_backend->priv->source_changed_id = g_signal_connect (
ae7d88
 			source, "changed",
ae7d88
 			G_CALLBACK (ews_backend_source_changed_cb), ews_backend);
ae7d88
 	}