diff options
author | Dan Williams <dcbw@redhat.com> | 2012-08-24 09:31:48 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-08-24 09:31:48 -0500 |
commit | 2bfd215ca731a6190e7acf6e969cd39bf4adaed7 (patch) | |
tree | 9771f7b4ada8a2b05aa3e9cbcb6ca7a939f41200 | |
parent | 31b3c0f8ff9842bf1f05aefcb9f9ffaf61626b16 (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.c | 31 |
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; |