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.
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);