[evolution-data-server/gnome-3-34] I#156 - EBook/CalMetaBackend: Automatic refresh not always setup



commit 0044d3cde43b1853eccb46425125613b7c41ad5c
Author: Milan Crha <mcrha redhat com>
Date:   Fri Sep 20 12:34:14 2019 +0200

    I#156 - EBook/CalMetaBackend: Automatic refresh not always setup
    
    Closes https://gitlab.gnome.org/GNOME/evolution-data-server/issues/156

 .../libedata-book/e-book-meta-backend.c            | 27 +++++++++++++++-------
 src/calendar/libedata-cal/e-cal-meta-backend.c     | 27 +++++++++++++++-------
 2 files changed, 38 insertions(+), 16 deletions(-)
---
diff --git a/src/addressbook/libedata-book/e-book-meta-backend.c 
b/src/addressbook/libedata-book/e-book-meta-backend.c
index 3307d6a5f..060ddf73b 100644
--- a/src/addressbook/libedata-book/e-book-meta-backend.c
+++ b/src/addressbook/libedata-book/e-book-meta-backend.c
@@ -762,6 +762,8 @@ ebmb_maybe_remove_from_cache (EBookMetaBackend *meta_backend,
        return TRUE;
 }
 
+static void ebmb_ensure_refresh_timeout_set_locked (EBookMetaBackend *meta_backend);
+
 static gboolean
 ebmb_refresh_internal_sync (EBookMetaBackend *meta_backend,
                            gboolean with_connection_error,
@@ -865,6 +867,8 @@ ebmb_refresh_internal_sync (EBookMetaBackend *meta_backend,
        if (meta_backend->priv->refresh_cancellable == cancellable)
                g_clear_object (&meta_backend->priv->refresh_cancellable);
 
+       ebmb_ensure_refresh_timeout_set_locked (meta_backend);
+
        g_mutex_unlock (&meta_backend->priv->property_lock);
 
        e_book_backend_foreach_view_notify_progress (E_BOOK_BACKEND (meta_backend), TRUE, 0, NULL);
@@ -905,6 +909,20 @@ ebmb_source_refresh_timeout_cb (ESource *source,
        }
 }
 
+/* Should hold the property_lock when calling this */
+static void
+ebmb_ensure_refresh_timeout_set_locked (EBookMetaBackend *meta_backend)
+{
+       if (!meta_backend->priv->refresh_timeout_id) {
+               ESource *source = e_backend_get_source (E_BACKEND (meta_backend));
+
+               if (e_source_has_extension (source, E_SOURCE_EXTENSION_REFRESH)) {
+                       meta_backend->priv->refresh_timeout_id = e_source_refresh_add_timeout (source, NULL,
+                               ebmb_source_refresh_timeout_cb, e_weak_ref_new (meta_backend), 
(GDestroyNotify) e_weak_ref_free);
+               }
+       }
+}
+
 static void
 ebmb_source_changed_thread_func (EBookBackend *book_backend,
                                 gpointer user_data,
@@ -921,14 +939,7 @@ ebmb_source_changed_thread_func (EBookBackend *book_backend,
        meta_backend = E_BOOK_META_BACKEND (book_backend);
 
        g_mutex_lock (&meta_backend->priv->property_lock);
-       if (!meta_backend->priv->refresh_timeout_id) {
-               ESource *source = e_backend_get_source (E_BACKEND (meta_backend));
-
-               if (e_source_has_extension (source, E_SOURCE_EXTENSION_REFRESH)) {
-                       meta_backend->priv->refresh_timeout_id = e_source_refresh_add_timeout (source, NULL,
-                               ebmb_source_refresh_timeout_cb, e_weak_ref_new (meta_backend), 
(GDestroyNotify) e_weak_ref_free);
-               }
-       }
+       ebmb_ensure_refresh_timeout_set_locked (meta_backend);
        g_mutex_unlock (&meta_backend->priv->property_lock);
 
        g_signal_emit (meta_backend, signals[SOURCE_CHANGED], 0, NULL);
diff --git a/src/calendar/libedata-cal/e-cal-meta-backend.c b/src/calendar/libedata-cal/e-cal-meta-backend.c
index 68c57ecaa..25cd0652e 100644
--- a/src/calendar/libedata-cal/e-cal-meta-backend.c
+++ b/src/calendar/libedata-cal/e-cal-meta-backend.c
@@ -664,6 +664,8 @@ ecmb_maybe_remove_from_cache (ECalMetaBackend *meta_backend,
        return TRUE;
 }
 
+static void ecmb_ensure_refresh_timeout_set_locked (ECalMetaBackend *meta_backend);
+
 static gboolean
 ecmb_refresh_internal_sync (ECalMetaBackend *meta_backend,
                            gboolean with_connection_error,
@@ -766,6 +768,8 @@ ecmb_refresh_internal_sync (ECalMetaBackend *meta_backend,
        if (meta_backend->priv->refresh_cancellable == cancellable)
                g_clear_object (&meta_backend->priv->refresh_cancellable);
 
+       ecmb_ensure_refresh_timeout_set_locked (meta_backend);
+
        g_mutex_unlock (&meta_backend->priv->property_lock);
 
        e_cal_backend_foreach_view_notify_progress (E_CAL_BACKEND (meta_backend), TRUE, 0, NULL);
@@ -806,6 +810,20 @@ ecmb_source_refresh_timeout_cb (ESource *source,
        }
 }
 
+/* Should hold the property_lock when calling this */
+static void
+ecmb_ensure_refresh_timeout_set_locked (ECalMetaBackend *meta_backend)
+{
+       if (!meta_backend->priv->refresh_timeout_id) {
+               ESource *source = e_backend_get_source (E_BACKEND (meta_backend));
+
+               if (e_source_has_extension (source, E_SOURCE_EXTENSION_REFRESH)) {
+                       meta_backend->priv->refresh_timeout_id = e_source_refresh_add_timeout (source, NULL,
+                               ecmb_source_refresh_timeout_cb, e_weak_ref_new (meta_backend), 
(GDestroyNotify) e_weak_ref_free);
+               }
+       }
+}
+
 static void
 ecmb_source_changed_thread_func (ECalBackend *cal_backend,
                                 gpointer user_data,
@@ -822,14 +840,7 @@ ecmb_source_changed_thread_func (ECalBackend *cal_backend,
        meta_backend = E_CAL_META_BACKEND (cal_backend);
 
        g_mutex_lock (&meta_backend->priv->property_lock);
-       if (!meta_backend->priv->refresh_timeout_id) {
-               ESource *source = e_backend_get_source (E_BACKEND (meta_backend));
-
-               if (e_source_has_extension (source, E_SOURCE_EXTENSION_REFRESH)) {
-                       meta_backend->priv->refresh_timeout_id = e_source_refresh_add_timeout (source, NULL,
-                               ecmb_source_refresh_timeout_cb, e_weak_ref_new (meta_backend), 
(GDestroyNotify) e_weak_ref_free);
-               }
-       }
+       ecmb_ensure_refresh_timeout_set_locked (meta_backend);
        g_mutex_unlock (&meta_backend->priv->property_lock);
 
        g_signal_emit (meta_backend, signals[SOURCE_CHANGED], 0, NULL);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]