aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2009-12-01 16:33:44 -0800
committerDan Williams <dcbw@redhat.com>2009-12-01 16:33:44 -0800
commitbf13b4698f8d94119f42e5cdf5df6a3dbfe354fd (patch)
tree7ae2d0e47a3b86bc052e249bdeb87d4208e1f09c /src
parentc169396c1bbb1238e3c405bb9c53eb12712acb9b (diff)
cdma: reset previous state if disconnect failed
Diffstat (limited to 'src')
-rw-r--r--src/mm-generic-cdma.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c
index e446b3ca..0e99ec77 100644
--- a/src/mm-generic-cdma.c
+++ b/src/mm-generic-cdma.c
@@ -555,6 +555,14 @@ disconnect_flash_done (MMSerialPort *port,
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (info->modem);
if (error) {
+ MMModemState prev_state;
+
+ /* Reset old state since the operation failed */
+ prev_state = GPOINTER_TO_UINT (mm_callback_info_get_data (info, MM_GENERIC_CDMA_PREV_STATE_TAG));
+ mm_modem_set_state (MM_MODEM (info->modem),
+ prev_state,
+ MM_MODEM_STATE_REASON_NONE);
+
info->error = g_error_copy (error);
mm_callback_info_schedule (info);
return;
@@ -573,12 +581,20 @@ disconnect (MMModem *modem,
{
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
MMCallbackInfo *info;
+ MMModemState state;
g_return_if_fail (priv->primary != NULL);
- mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, MM_MODEM_STATE_REASON_NONE);
-
info = mm_callback_info_new (modem, callback, user_data);
+
+ /* Cache the previous state so we can reset it if the operation fails */
+ state = mm_modem_get_state (modem);
+ mm_callback_info_set_data (info,
+ MM_GENERIC_CDMA_PREV_STATE_TAG,
+ GUINT_TO_POINTER (state),
+ NULL);
+
+ mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, MM_MODEM_STATE_REASON_NONE);
mm_serial_port_flash (priv->primary, 1000, disconnect_flash_done, info);
}