summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeeshan Ali (Khattak) <zeeshanak@gnome.org>2014-04-15 20:10:59 +0100
committerZeeshan Ali (Khattak) <zeeshanak@gnome.org>2014-04-15 20:10:59 +0100
commitda34818580d8a9732653a02b098902f80ee4bc8f (patch)
tree3d1712dd1b389892550a909322353d7f9b834489
parentbc975c216fcbd442ce360a17e83cbcdb4649688d (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.c20
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),