[evolution-data-server/gnome-3-16] Bug 678901 - Avoid ESource::changed notification after extension load



commit b1ab573e818ac87635036fa1ba66c4bd1121db9d
Author: Milan Crha <mcrha redhat com>
Date:   Thu Jun 11 12:03:19 2015 +0200

    Bug 678901 - Avoid ESource::changed notification after extension load

 libedataserver/e-source.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/libedataserver/e-source.c b/libedataserver/e-source.c
index 8660106..b6022a8 100644
--- a/libedataserver/e-source.c
+++ b/libedataserver/e-source.c
@@ -126,6 +126,7 @@ struct _ESourcePrivate {
 
        GSource *changed;
        GMutex changed_lock;
+       guint ignore_changed_signal;
 
        GSource *data_change;
        GMutex data_change_lock;
@@ -2813,7 +2814,8 @@ e_source_changed (ESource *source)
        g_return_if_fail (E_IS_SOURCE (source));
 
        g_mutex_lock (&source->priv->changed_lock);
-       if (source->priv->changed == NULL) {
+       if (!source->priv->ignore_changed_signal &&
+           source->priv->changed == NULL) {
                source->priv->changed = g_idle_source_new ();
                g_source_set_callback (
                        source->priv->changed,
@@ -3209,6 +3211,10 @@ e_source_get_extension (ESource *source,
 
        /* Create a new instance of the appropriate GType. */
        if (class != NULL) {
+               g_mutex_lock (&source->priv->changed_lock);
+               source->priv->ignore_changed_signal++;
+               g_mutex_unlock (&source->priv->changed_lock);
+
                extension = g_object_new (
                        G_TYPE_FROM_CLASS (class),
                        "source", source, NULL);
@@ -3219,6 +3225,10 @@ e_source_get_extension (ESource *source,
                g_hash_table_insert (
                        source->priv->extensions,
                        g_strdup (extension_name), extension);
+
+               g_mutex_lock (&source->priv->changed_lock);
+               source->priv->ignore_changed_signal--;
+               g_mutex_unlock (&source->priv->changed_lock);
        } else {
                /* XXX Tie this into a debug setting for ESources. */
 #ifdef DEBUG


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