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



commit c9207212c75f4801ef9e0a57a6915339bd379942
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 ea61a9fcc..d0fb4dfb4 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 acf9d87af..45904616d 100644
--- a/src/calendar/libedata-cal/e-cal-meta-backend.c
+++ b/src/calendar/libedata-cal/e-cal-meta-backend.c
@@ -665,6 +665,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,
@@ -767,6 +769,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);
@@ -807,6 +811,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,
@@ -823,14 +841,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]