diff options
author | Rui Matos <tiagomatos@gmail.com> | 2012-09-13 02:01:56 +0200 |
---|---|---|
committer | Rui Matos <tiagomatos@gmail.com> | 2012-09-13 14:25:49 +0200 |
commit | 9d715bb09828c1e2e961cd5a3798b963649047cf (patch) | |
tree | ff2f2bd23f25fb666df0c15a573512b55cb20705 /plugins/keyboard | |
parent | 205c8afa75b5e9b2abeea709f4886558f189bcc5 (diff) | |
download | gnome-settings-daemon-9d715bb09828c1e2e961cd5a3798b963649047cf.tar.gz |
keyboard: Check invariants on async code paths
https://bugzilla.gnome.org/show_bug.cgi?id=683798
Diffstat (limited to 'plugins/keyboard')
-rw-r--r-- | 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 e0e3a70d..5462805e 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 (); |