File tree Expand file tree Collapse file tree 1 file changed +18
-1
lines changed
telephony/java/com/android/internal/telephony/gsm Expand file tree Collapse file tree 1 file changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -1459,6 +1459,11 @@ private enum Get_Spn_Fsm_State {
14591459 * After starting, FSM will search SPN EFs in order and stop after finding
14601460 * the first valid SPN
14611461 *
1462+ * If the FSM gets restart while waiting for one of
1463+ * SPN EFs results (i.e. a SIM refresh occurs after issuing
1464+ * read EF_CPHS_SPN), it will re-initialize only after
1465+ * receiving and discarding the unfinished SPN EF result.
1466+ *
14621467 * @param start set true only for initialize loading
14631468 * @param ar the AsyncResult from loadEFTransparent
14641469 * ar.exception holds exception in error
@@ -1468,7 +1473,19 @@ private void getSpnFsm(boolean start, AsyncResult ar) {
14681473 byte [] data ;
14691474
14701475 if (start ) {
1471- spnState = Get_Spn_Fsm_State .INIT ;
1476+ // Check previous state to see if there is outstanding
1477+ // SPN read
1478+ if (spnState == Get_Spn_Fsm_State .READ_SPN_3GPP ||
1479+ spnState == Get_Spn_Fsm_State .READ_SPN_CPHS ||
1480+ spnState == Get_Spn_Fsm_State .READ_SPN_SHORT_CPHS ||
1481+ spnState == Get_Spn_Fsm_State .INIT ) {
1482+ // Set INIT then return so the INIT code
1483+ // will run when the outstanding read done.
1484+ spnState = Get_Spn_Fsm_State .INIT ;
1485+ return ;
1486+ } else {
1487+ spnState = Get_Spn_Fsm_State .INIT ;
1488+ }
14721489 }
14731490
14741491 switch (spnState ){
You can’t perform that action at this time.
0 commit comments