[gnome-settings-daemon] keyboard: Check invariants on async code paths



commit 9d715bb09828c1e2e961cd5a3798b963649047cf
Author: Rui Matos <tiagomatos gmail com>
Date:   Thu Sep 13 02:01:56 2012 +0200

    keyboard: Check invariants on async code paths
    
    https://bugzilla.gnome.org/show_bug.cgi?id=683798

 plugins/keyboard/gsd-keyboard-manager.c |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)
---
diff --git a/plugins/keyboard/gsd-keyboard-manager.c b/plugins/keyboard/gsd-keyboard-manager.c
index e0e3a70..5462805 100644
--- a/plugins/keyboard/gsd-keyboard-manager.c
+++ b/plugins/keyboard/gsd-keyboard-manager.c
@@ -181,14 +181,16 @@ fetch_ibus_engines_result (GObject            *object,
 {
         GsdKeyboardManagerPrivate *priv = manager->priv;
         GList *list, *l;
-        GError *error;
+        GError *error = NULL;
+
+        /* engines shouldn't be there yet */
+        g_return_if_fail (priv->ibus_engines == NULL);
+
+        g_clear_object (&priv->ibus_cancellable);
 
-        error = NULL;
         list = ibus_bus_list_engines_async_finish (priv->ibus,
                                                    result,
                                                    &error);
-        g_clear_object (&priv->ibus_cancellable);
-
         if (!list && error) {
                 g_warning ("Couldn't finish IBus request: %s", error->message);
                 g_error_free (error);
@@ -226,6 +228,10 @@ fetch_ibus_engines (GsdKeyboardManager *manager)
 {
         GsdKeyboardManagerPrivate *priv = manager->priv;
 
+        /* engines shouldn't be there yet */
+        g_return_if_fail (priv->ibus_engines == NULL);
+        g_return_if_fail (priv->ibus_cancellable == NULL);
+
         priv->ibus_cancellable = g_cancellable_new ();
 
         ibus_bus_list_engines_async (priv->ibus,
@@ -287,6 +293,9 @@ got_session_name (GObject            *object,
         const gchar *session_name = NULL;
         GError *error = NULL;
 
+        /* IBus shouldn't have been touched yet */
+        g_return_if_fail (priv->ibus == NULL);
+
         g_clear_object (&priv->ibus_cancellable);
 
         result = g_dbus_connection_call_finish (connection, res, &error);
@@ -319,6 +328,9 @@ got_bus (GObject            *object,
         GsdKeyboardManagerPrivate *priv = manager->priv;
         GError *error = NULL;
 
+        /* IBus shouldn't have been touched yet */
+        g_return_if_fail (priv->ibus == NULL);
+
         g_clear_object (&priv->ibus_cancellable);
 
         connection = g_bus_get_finish (res, &error);
@@ -375,6 +387,9 @@ set_ibus_engine (GsdKeyboardManager *manager,
 {
         GsdKeyboardManagerPrivate *priv = manager->priv;
 
+        g_return_if_fail (priv->ibus != NULL);
+        g_return_if_fail (priv->ibus_engines != NULL);
+
         g_cancellable_cancel (priv->ibus_cancellable);
         g_clear_object (&priv->ibus_cancellable);
         priv->ibus_cancellable = g_cancellable_new ();



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