From 018ee10f92a48ac278b4219c1cf51876155fd5da Mon Sep 17 00:00:00 2001 From: Andrzej Zaborowski Date: Fri, 7 May 2010 02:26:48 +0200 Subject: Fix: Don't remove wrong atoms When the state goes from INSERTED to NOT PRESENT and we have not advanced past the SIM PIN entry, we remove the pre_sim atoms. Similarly, if we advanced past the SIM PIN stage and subsequently removed the SIM, the pre_sim atom list should not be tampered with. --- src/modem.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/modem.c b/src/modem.c index 8319702e..0d0cb2a6 100644 --- a/src/modem.c +++ b/src/modem.c @@ -1132,13 +1132,16 @@ static void modem_sim_ready(void *user, enum ofono_sim_state new_state) switch (new_state) { case OFONO_SIM_STATE_NOT_PRESENT: - remove_all_atoms(&modem->atoms); + if (modem->pre_sim_atoms != NULL) + remove_all_atoms(&modem->atoms); break; case OFONO_SIM_STATE_INSERTED: break; case OFONO_SIM_STATE_READY: - modem->pre_sim_atoms = modem->atoms; - modem->atoms = NULL; + if (modem->pre_sim_atoms == NULL) { + modem->pre_sim_atoms = modem->atoms; + modem->atoms = NULL; + } if (modem->driver->post_sim) modem->driver->post_sim(modem); -- cgit v1.2.3