aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/mm-modem-cinterion-gsm.c59
1 files changed, 51 insertions, 8 deletions
diff --git a/plugins/mm-modem-cinterion-gsm.c b/plugins/mm-modem-cinterion-gsm.c
index 199d03af..74205872 100644
--- a/plugins/mm-modem-cinterion-gsm.c
+++ b/plugins/mm-modem-cinterion-gsm.c
@@ -164,11 +164,16 @@ get_2g_band_done (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
else {
+ MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
guint32 mm_band = MM_MODEM_GSM_BAND_UNKNOWN;
GRegex *regex;
GMatchInfo *match_info = NULL;
@@ -235,11 +240,16 @@ get_3g_band_done (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
else {
+ MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
guint32 mm_band = 0;
GRegex *regex;
GMatchInfo *match_info = NULL;
@@ -335,12 +345,19 @@ set_band_done (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
- else
+ else {
+ MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
priv->current_bands = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-band"));
+ }
mm_callback_info_schedule (info);
}
@@ -545,11 +562,16 @@ get_smong_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = user_data;
- MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+ MMModemCinterionGsmPrivate *priv;
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
GMatchInfo *match_info = NULL;
GRegex *regex;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
info->error = g_error_copy (error);
mm_callback_info_set_result (info, GUINT_TO_POINTER (act), NULL);
@@ -557,6 +579,8 @@ get_smong_cb (MMAtSerialPort *port,
return;
}
+ priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
/* The AT^SMONG command returns a cell info table, where the second
* column identifies the "GPRS status", which is exactly what we want.
* So we'll try to read that second number in the values row.
@@ -605,6 +629,11 @@ get_sind_cb (MMAtSerialPort *port,
GMatchInfo *match_info = NULL;
GRegex *regex;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
info->error = g_error_copy (error);
mm_callback_info_set_result (info, GUINT_TO_POINTER (act), NULL);
@@ -690,12 +719,19 @@ set_allowed_mode_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
- MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
if (error)
info->error = g_error_copy (error);
- else
+ else {
+ MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
priv->allowed_mode = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-mode"));
+ }
mm_callback_info_schedule (info);
}
@@ -803,14 +839,21 @@ get_supported_networks_cb (MMAtSerialPort *port,
gpointer user_data)
{
MMCallbackInfo *info = user_data;
- MMModemCinterionGsmPrivate *priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+ MMModemCinterionGsmPrivate *priv;
GError *inner_error = NULL;
+ /* If the modem has already been removed, return without
+ * scheduling callback */
+ if (mm_callback_info_check_modem_removed (info))
+ return;
+
if (error) {
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
return;
}
+ priv = MM_MODEM_CINTERION_GSM_GET_PRIVATE (info->modem);
+
/* Note: Documentation says that AT+WS46=? is replied with '+WS46:' followed
* by a list of supported network modes between parenthesis, but the EGS5
* used to test this didn't use the 'WS46:' prefix. Also, more than one