base-modem: disconnect internal cancellable handler while disposing

This commit is contained in:
Aleksander Morgado
2012-03-30 16:11:14 +02:00
parent b68461c417
commit 8c84aea3f0

View File

@@ -56,6 +56,7 @@ struct _MMBaseModemPrivate {
/* Modem-wide cancellable. If it ever gets cancelled, no further operations /* Modem-wide cancellable. If it ever gets cancelled, no further operations
* should be done by the modem. */ * should be done by the modem. */
GCancellable *cancellable; GCancellable *cancellable;
gulong invalid_if_cancelled;
gchar *device; gchar *device;
gchar *driver; gchar *driver;
@@ -877,10 +878,11 @@ mm_base_modem_init (MMBaseModem *self)
/* Setup modem-wide cancellable */ /* Setup modem-wide cancellable */
self->priv->cancellable = g_cancellable_new (); self->priv->cancellable = g_cancellable_new ();
g_cancellable_connect (self->priv->cancellable, self->priv->invalid_if_cancelled =
G_CALLBACK (base_modem_cancelled), g_cancellable_connect (self->priv->cancellable,
self, G_CALLBACK (base_modem_cancelled),
NULL); self,
NULL);
self->priv->ports = g_hash_table_new_full (g_str_hash, self->priv->ports = g_hash_table_new_full (g_str_hash,
g_str_equal, g_str_equal,
@@ -1000,7 +1002,11 @@ dispose (GObject *object)
g_clear_object (&self->priv->authp_cancellable); g_clear_object (&self->priv->authp_cancellable);
g_clear_object (&self->priv->authp); g_clear_object (&self->priv->authp);
/* Ensure we cancel any ongoing operation */ /* Ensure we cancel any ongoing operation, but before
* disconnect our own signal handler, or we'll end up with
* another reference of the modem object around. */
g_cancellable_disconnect (self->priv->cancellable,
self->priv->invalid_if_cancelled);
g_cancellable_cancel (self->priv->cancellable); g_cancellable_cancel (self->priv->cancellable);
g_clear_object (&self->priv->cancellable); g_clear_object (&self->priv->cancellable);