mbm: Fix crash from processing multiple *EMRDY

Sometimes we see the *EMRDY notification before we query, and trigger
initialization procedures twice.
This commit is contained in:
Denis Kenzior 2012-08-16 11:39:22 -05:00
parent cdb3de4d03
commit 8112a025b9
1 changed files with 11 additions and 3 deletions

View File

@ -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);
}