[evolution-data-server] I#156 - EBook/CalMetaBackend: Automatic refresh not always setup
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] I#156 - EBook/CalMetaBackend: Automatic refresh not always setup
- Date: Fri, 20 Sep 2019 10:34:10 +0000 (UTC)
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]