diff options
author | Dan Williams <dcbw@redhat.com> | 2009-12-01 16:33:44 -0800 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-12-01 16:33:44 -0800 |
commit | bf13b4698f8d94119f42e5cdf5df6a3dbfe354fd (patch) | |
tree | 7ae2d0e47a3b86bc052e249bdeb87d4208e1f09c /src | |
parent | c169396c1bbb1238e3c405bb9c53eb12712acb9b (diff) |
cdma: reset previous state if disconnect failed
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-generic-cdma.c | 20 |
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); } |