diff options
author | Wink Saville <wink@google.com> | 2013-08-16 17:17:28 -0700 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2013-08-29 13:02:24 -0700 |
commit | f860f85c33d7a13ccc7c0c653deeaa9ec8cdd184 (patch) | |
tree | 1f2c5a60899848172865c01f892ee703e3ee31eb | |
parent | aa2e36190e0112257a220427af0bd92773f8b082 (diff) | |
download | base-f860f85c33d7a13ccc7c0c653deeaa9ec8cdd184.tar.gz |
DO NOT MERGE: MDST is not ready until connected to DcTracker.
When the system becomes loaded the PhoneApp can be delayed
significantly and a call to setEnableFailFastMobileData may not
occur because the channel between the MobileDataStateTracker (MDST)
and DcTracker (DCT) is not connected.
Solution: Add a isReady to MDST and isMobileDataStateTrackerReady to
ConnectivityService and call it from isMobileOk.
Bug: 10351868
Change-Id: I92f9d58121b88186b636cd71c2fd2ef9a28f7cf6
-rw-r--r-- | core/java/android/net/MobileDataStateTracker.java | 7 | ||||
-rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 28 |
2 files changed, 30 insertions, 5 deletions
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index adad8decca89..98cccb869d2f 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -375,6 +375,13 @@ public class MobileDataStateTracker implements NetworkStateTracker { return (setEnableApn(mApnType, false) != PhoneConstants.APN_REQUEST_FAILED); } + /** + * @return true if this is ready to operate + */ + public boolean isReady() { + return mDataConnectionTrackerAc != null; + } + @Override public void captivePortalCheckComplete() { // not implemented diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index fa016f458748..06708191d9e4 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -3572,6 +3572,12 @@ public class ConnectivityService extends IConnectivityManager.Stub { enabled)); } + private boolean isMobileDataStateTrackerReady() { + MobileDataStateTracker mdst = + (MobileDataStateTracker) mNetTrackers[ConnectivityManager.TYPE_MOBILE]; + return (mdst != null) && (mdst.isReady()); + } + @Override public int checkMobileProvisioning(boolean sendNotification, int suggestedTimeOutMs, final ResultReceiver resultReceiver) { @@ -3739,14 +3745,26 @@ public class ConnectivityService extends IConnectivityManager.Stub { } try { - // Enable fail fast as we'll do retries here and use a - // hipri connection so the default connection stays active. - log("isMobileOk: start hipri url=" + params.mUrl); - mCs.setEnableFailFastMobileData(DctConstants.ENABLED); - // Continue trying to connect until time has run out long endTime = SystemClock.elapsedRealtime() + params.mTimeOutMs; + if (!mCs.isMobileDataStateTrackerReady()) { + // Wait for MobileDataStateTracker to be ready. + if (DBG) log("isMobileOk: mdst is not ready"); + while(SystemClock.elapsedRealtime() < endTime) { + if (mCs.isMobileDataStateTrackerReady()) { + // Enable fail fast as we'll do retries here and use a + // hipri connection so the default connection stays active. + if (DBG) log("isMobileOk: mdst ready, enable fail fast of mobile data"); + mCs.setEnableFailFastMobileData(DctConstants.ENABLED); + break; + } + sleep(1); + } + } + + log("isMobileOk: start hipri url=" + params.mUrl); + // First wait until we can start using hipri Binder binder = new Binder(); while(SystemClock.elapsedRealtime() < endTime) { |