Fix for race condition in pollState

When radio is off and sim state READY event is received after
querying for voice and data registration states, the response
is considered as stale and ignored. Check if modem triggered
polling is pending before ignoring the registration states
response.

Change-Id: Idc106a4860eb1b2e9c1debad54bd3de0e724ad7a
CRs-Fixed: 2009191
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index a0db6ac..80758f5 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -147,6 +147,8 @@
      */
     private boolean mDontPollSignalStrength = false;
 
+    private boolean mIsModemTriggeredPollingPending = false;
+
     private RegistrantList mVoiceRoamingOnRegistrants = new RegistrantList();
     private RegistrantList mVoiceRoamingOffRegistrants = new RegistrantList();
     private RegistrantList mDataRoamingOnRegistrants = new RegistrantList();
@@ -2554,13 +2556,15 @@
                 // don't poll for state when the radio is off
                 // EXCEPT, if the poll was modemTrigged (they sent us new radio data)
                 // or we're on IWLAN
-                if (!modemTriggered && ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN
-                        != mSS.getRilDataRadioTechnology()) {
+                if (!modemTriggered && !mIsModemTriggeredPollingPending &&
+                        ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN !=
+                        mSS.getRilDataRadioTechnology()) {
                     pollStateDone();
                     break;
                 }
 
             default:
+                if (modemTriggered) mIsModemTriggeredPollingPending = true;
                 // Issue all poll-related commands at once then count down the responses, which
                 // are allowed to arrive out-of-order
                 mPollingContext[0]++;
@@ -2584,6 +2588,7 @@
 
     //todo: try to merge pollstate functions
     private void pollStateDone() {
+        mIsModemTriggeredPollingPending = false;
         if (mPhone.isPhoneTypeGsm()) {
             pollStateDoneGsm();
         } else if (mPhone.isPhoneTypeCdma()) {