cdma: reset previous state if disconnect failed
This commit is contained in:
@@ -555,6 +555,14 @@ disconnect_flash_done (MMSerialPort *port,
|
|||||||
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (info->modem);
|
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (info->modem);
|
||||||
|
|
||||||
if (error) {
|
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);
|
info->error = g_error_copy (error);
|
||||||
mm_callback_info_schedule (info);
|
mm_callback_info_schedule (info);
|
||||||
return;
|
return;
|
||||||
@@ -573,12 +581,20 @@ disconnect (MMModem *modem,
|
|||||||
{
|
{
|
||||||
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
|
MMGenericCdmaPrivate *priv = MM_GENERIC_CDMA_GET_PRIVATE (modem);
|
||||||
MMCallbackInfo *info;
|
MMCallbackInfo *info;
|
||||||
|
MMModemState state;
|
||||||
|
|
||||||
g_return_if_fail (priv->primary != NULL);
|
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);
|
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);
|
mm_serial_port_flash (priv->primary, 1000, disconnect_flash_done, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user