mirror of git://git.sysmocom.de/ofono
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:
parent
cdb3de4d03
commit
8112a025b9
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue