summaryrefslogtreecommitdiffstats
path: root/plugins/mbm.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2012-08-16 11:39:22 -0500
committerDenis Kenzior <denkenz@gmail.com>2012-08-16 11:39:22 -0500
commit8112a025b9dcc0c56a2c55ee874d89cccbb4ffe4 (patch)
treead96c0fef9f76c62b5f422ee38fd9778e8922c4a /plugins/mbm.c
parentcdb3de4d032784aec51b62326113f0d545294ef9 (diff)
downloadofono-8112a025b9dcc0c56a2c55ee874d89cccbb4ffe4.tar.bz2
mbm: Fix crash from processing multiple *EMRDY
Sometimes we see the *EMRDY notification before we query, and trigger initialization procedures twice.
Diffstat (limited to 'plugins/mbm.c')
-rw-r--r--plugins/mbm.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/plugins/mbm.c b/plugins/mbm.c
index 71555ee3..3299bc28 100644
--- a/plugins/mbm.c
+++ b/plugins/mbm.c
@@ -59,10 +59,13 @@ enum mbm_variant {
MBM_DELL_D5530, /* OEM of F3507g */
};
+#define MBM_FLAG_HAVE_SIM 0x1
+#define MBM_FLAG_SAW_EMRDY 0x2
+
struct mbm_data {
GAtChat *modem_port;
GAtChat *data_port;
- gboolean have_sim;
+ unsigned int flags;
struct ofono_location_reporting *lr;
enum mbm_variant variant;
struct at_util_sim_state_query *sim_state_query;
@@ -134,7 +137,7 @@ static void sim_state_cb(gboolean present, gpointer user_data)
at_util_sim_state_query_free(data->sim_state_query);
data->sim_state_query = NULL;
- data->have_sim = present;
+ data->flags |= MBM_FLAG_HAVE_SIM;
ofono_modem_set_powered(modem, TRUE);
}
@@ -220,6 +223,9 @@ static void emrdy_notifier(GAtResult *result, gpointer user_data)
DBG("");
+ if (data->flags & MBM_FLAG_SAW_EMRDY)
+ return;
+
g_at_result_iter_init(&iter, result);
if (g_at_result_iter_next(&iter, "*EMRDY:") == FALSE)
@@ -230,6 +236,8 @@ static void emrdy_notifier(GAtResult *result, gpointer user_data)
if (status != 1)
return;
+ data->flags |= MBM_FLAG_SAW_EMRDY;
+
g_at_chat_send(data->modem_port, "AT+CFUN?", cfun_prefix,
cfun_query, modem, NULL);
}
@@ -409,7 +417,7 @@ static void mbm_pre_sim(struct ofono_modem *modem)
sim = ofono_sim_create(modem, OFONO_VENDOR_MBM,
"atmodem", data->modem_port);
- if (data->have_sim && sim)
+ if ((data->flags & MBM_FLAG_HAVE_SIM) && sim)
ofono_sim_inserted_notify(sim, TRUE);
}