aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-08-24 09:31:48 -0500
committerDan Williams <dcbw@redhat.com>2012-08-24 09:31:48 -0500
commit2bfd215ca731a6190e7acf6e969cd39bf4adaed7 (patch)
tree9771f7b4ada8a2b05aa3e9cbcb6ca7a939f41200
parent31b3c0f8ff9842bf1f05aefcb9f9ffaf61626b16 (diff)
icera: be more paranoid about cleaning up connect operations
In case the connect gets interrupted by a disconnect or something.
-rw-r--r--plugins/mm-modem-icera.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/plugins/mm-modem-icera.c b/plugins/mm-modem-icera.c
index 2bbf677b..583950a2 100644
--- a/plugins/mm-modem-icera.c
+++ b/plugins/mm-modem-icera.c
@@ -50,6 +50,20 @@ struct _MMModemIceraPrivate {
#define MM_MODEM_ICERA_GET_PRIVATE(m) (MM_MODEM_ICERA_GET_INTERFACE (m)->get_private(m))
+static void connect_pending_done (MMModemIcera *self);
+
+
+static void
+cleanup_configure_context (MMModemIcera *self)
+{
+ MMModemIceraPrivate *priv = MM_MODEM_ICERA_GET_PRIVATE (self);
+
+ if (priv->configure_context_id != 0) {
+ g_source_remove (priv->configure_context_id);
+ priv->configure_context_id = 0;
+ }
+}
+
static void
get_allowed_mode_done (MMAtSerialPort *port,
GString *response,
@@ -326,6 +340,10 @@ mm_modem_icera_do_disconnect (MMGenericGsm *gsm,
MMAtSerialPort *primary;
char *command;
+ /* Cleanup any running connect stuff */
+ cleanup_configure_context (MM_MODEM_ICERA (gsm));
+ connect_pending_done (MM_MODEM_ICERA (gsm));
+
info = mm_callback_info_new (MM_MODEM (gsm), callback, user_data);
primary = mm_generic_gsm_get_at_port (gsm, MM_AT_PORT_FLAG_PRIMARY);
@@ -565,8 +583,8 @@ old_context_clear_done (MMAtSerialPort *port,
icera_call_control (MM_MODEM_ICERA (info->modem), TRUE, icera_connected, info);
}
-static void configure_context(MMAtSerialPort *port, MMCallbackInfo *info,
- char *username, char *password, gint cid);
+static void configure_context (MMAtSerialPort *port, MMCallbackInfo *info,
+ char *username, char *password, gint cid);
static gboolean
retry_config_context (gpointer data)
@@ -579,7 +597,7 @@ retry_config_context (gpointer data)
priv->configure_context_id = 0;
primary = mm_generic_gsm_get_at_port (MM_GENERIC_GSM (self), MM_AT_PORT_FLAG_PRIMARY);
g_assert (primary);
- configure_context (primary, info, priv->username, priv->password, _get_cid(self));
+ configure_context (primary, info, priv->username, priv->password, _get_cid (self));
return FALSE;
}
@@ -654,7 +672,7 @@ mm_modem_icera_do_connect (MMModemIcera *self,
g_assert (primary);
priv->configure_context_tries = 0;
- configure_context(primary, info, priv->username, priv->password, _get_cid(self));
+ configure_context (primary, info, priv->username, priv->password, _get_cid (self));
}
/****************************************************************/
@@ -1373,10 +1391,7 @@ mm_modem_icera_cleanup (MMModemIcera *self)
/* Clear the pending connection if necessary */
connect_pending_done (self);
- if (priv->configure_context_id != 0) {
- g_source_remove (priv->configure_context_id);
- priv->configure_context_id = 0;
- }
+ cleanup_configure_context (self);
g_free (priv->username);
priv->username = NULL;