diff options
author | Zeeshan Ali (Khattak) <zeeshanak@gnome.org> | 2014-04-15 20:10:59 +0100 |
---|---|---|
committer | Zeeshan Ali (Khattak) <zeeshanak@gnome.org> | 2014-04-15 20:10:59 +0100 |
commit | da34818580d8a9732653a02b098902f80ee4bc8f (patch) | |
tree | 3d1712dd1b389892550a909322353d7f9b834489 | |
parent | bc975c216fcbd442ce360a17e83cbcdb4649688d (diff) |
modem-source: Don't assume synchronous cancellation
g_cancellable_cancel() isn't expected to synchronously cancel the async
operations and hence in the callbacks of async API, we shouldn't assume
the passed object (as user_data) to be there before successfully
finishing the async call (and thus ensuring it was not cancelled).
-rw-r--r-- | src/gclue-modem-source.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/gclue-modem-source.c b/src/gclue-modem-source.c index 5e030d0..4a753ac 100644 --- a/src/gclue-modem-source.c +++ b/src/gclue-modem-source.c @@ -120,18 +120,21 @@ on_modem_location_setup (GObject *source_object, GAsyncResult *res, gpointer user_data) { - GClueModemSourcePrivate *priv = GCLUE_MODEM_SOURCE (user_data)->priv; + GClueModemSourcePrivate *priv; GError *error = NULL; - if (!mm_modem_location_setup_finish (priv->modem_location, res, &error)) { + if (!mm_modem_location_setup_finish (MM_MODEM_LOCATION (source_object), + res, + &error)) { g_warning ("Failed to setup modem: %s", error->message); g_error_free (error); return; } + priv = GCLUE_MODEM_SOURCE (user_data)->priv; g_debug ("Modem '%s' setup.", mm_object_get_path (priv->mm_object)); - on_location_changed (G_OBJECT (priv->modem_location), NULL, user_data); + on_location_changed (source_object, NULL, user_data); } static void @@ -139,24 +142,25 @@ on_modem_enabled (GObject *source_object, GAsyncResult *res, gpointer user_data) { - GClueModemSource *source= GCLUE_MODEM_SOURCE (user_data); - GClueModemSourcePrivate *priv = source->priv; + GClueModemSourcePrivate *priv; MMModemLocationSource caps; GError *error = NULL; - if (!mm_modem_enable_finish (priv->modem, res, &error)) { - if (error->code == MM_CORE_ERROR_IN_PROGRESS) + if (!mm_modem_enable_finish (MM_MODEM (source_object), res, &error)) { + if (error->code == MM_CORE_ERROR_IN_PROGRESS) { /* Seems another source instance is already on it */ + priv = GCLUE_MODEM_SOURCE (user_data)->priv; g_signal_connect (G_OBJECT (priv->modem_location), "notify::location", G_CALLBACK (on_location_changed), user_data); - else + } else g_warning ("Failed to enable modem: %s", error->message); g_error_free (error); return; } + priv = GCLUE_MODEM_SOURCE (user_data)->priv; g_debug ("modem '%s' enabled.", mm_object_get_path (priv->mm_object)); g_signal_connect (G_OBJECT (priv->modem_location), |