diff options
author | Wink Saville <wink@google.com> | 2011-05-10 11:15:25 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-05-10 11:15:25 -0700 |
commit | 37eca253af7fb158684a72234f1c4d73d0a03c57 (patch) | |
tree | fac322dd704df336badd5cc756bb116efee68f35 | |
parent | e8a0619b03d7be488aef5dd34862e473710902f1 (diff) | |
parent | d649887a43efb435f1ea2255c364d8c214552aef (diff) | |
download | frameworks_base-37eca253af7fb158684a72234f1c4d73d0a03c57.zip frameworks_base-37eca253af7fb158684a72234f1c4d73d0a03c57.tar.gz frameworks_base-37eca253af7fb158684a72234f1c4d73d0a03c57.tar.bz2 |
am d649887a: am eb8da0fe: Merge "Fix issue on infinite retry config in RetryManager" into honeycomb-LTE
* commit 'd649887a43efb435f1ea2255c364d8c214552aef':
Fix issue on infinite retry config in RetryManager
3 files changed, 48 insertions, 28 deletions
diff --git a/telephony/java/com/android/internal/telephony/DataConnection.java b/telephony/java/com/android/internal/telephony/DataConnection.java index c4359a9..0188cf1 100644 --- a/telephony/java/com/android/internal/telephony/DataConnection.java +++ b/telephony/java/com/android/internal/telephony/DataConnection.java @@ -394,6 +394,20 @@ public abstract class DataConnection extends StateMachine { return mRetryMgr.isRetryForever(); } + /** + * @return whether the retry config is set successfully or not + */ + public boolean configureRetry(int maxRetryCount, int retryTime, int randomizationTime) { + return mRetryMgr.configure(maxRetryCount, retryTime, randomizationTime); + } + + /** + * @return whether the retry config is set successfully or not + */ + public boolean configureRetry(String configStr) { + return mRetryMgr.configure(configStr); + } + private AtomicInteger mRefCount = new AtomicInteger(0); /** diff --git a/telephony/java/com/android/internal/telephony/RetryManager.java b/telephony/java/com/android/internal/telephony/RetryManager.java index b1049a2..29bd104 100644 --- a/telephony/java/com/android/internal/telephony/RetryManager.java +++ b/telephony/java/com/android/internal/telephony/RetryManager.java @@ -308,12 +308,10 @@ public class RetryManager { } /** - * Reset network re-registration indicator and clear the data-retry counter - * and turns off retrying forever. + * Clear the data-retry counter */ public void resetRetryCount() { mRetryCount = 0; - mRetryForever = false; if (DBG) log("resetRetryCount: " + mRetryCount); } diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index 21c644d..3d7fc54 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -935,7 +935,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } if (dc == null) { - dc = createDataConnection(apnContext.getApnType()); + dc = createDataConnection(); } if (dc == null) { @@ -947,6 +947,11 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { dc.setActiveApnType(apnContext.getApnType()); int refCount = dc.incAndGetRefCount(); if (DBG) log("setupData: init dc and apnContext refCount=" + refCount); + + // configure retry count if no other Apn is using the same connection. + if (refCount == 1) { + configureRetry(dc, apnContext.getApnType()); + } DataConnectionAc dcac = mDataConnectionAsyncChannels.get(dc.getDataConnectionId()); apnContext.setDataConnectionAc(mDataConnectionAsyncChannels.get(dc.getDataConnectionId())); apnContext.setApnSetting(apn); @@ -1785,45 +1790,48 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { } /** Return the id for a new data connection */ - private GsmDataConnection createDataConnection(String apnType) { - if (DBG) log("createDataConnection(" + apnType + ") E"); + private GsmDataConnection createDataConnection() { + if (DBG) log("createDataConnection E"); + RetryManager rm = new RetryManager(); + int id = mUniqueIdGenerator.getAndIncrement(); + GsmDataConnection conn = GsmDataConnection.makeDataConnection(mPhone, id, rm); + mDataConnections.put(id, conn); + DataConnectionAc dcac = new DataConnectionAc(conn, LOG_TAG); + int status = dcac.fullyConnectSync(mPhone.getContext(), this, conn.getHandler()); + if (status == AsyncChannel.STATUS_SUCCESSFUL) { + mDataConnectionAsyncChannels.put(dcac.dataConnection.getDataConnectionId(), dcac); + } else { + loge("createDataConnection: Could not connect to dcac.mDc=" + dcac.dataConnection + + " status=" + status); + } + + if (DBG) log("createDataConnection() X id=" + id); + return conn; + } + + private void configureRetry(DataConnection dc, String apnType) { + if ((dc == null) || (apnType == null)) return; if (apnType.equals(Phone.APN_TYPE_DEFAULT)) { - if (!rm.configure(SystemProperties.get("ro.gsm.data_retry_config"))) { - if (!rm.configure(DEFAULT_DATA_RETRY_CONFIG)) { + if (!dc.configureRetry(SystemProperties.get("ro.gsm.data_retry_config"))) { + if (!dc.configureRetry(DEFAULT_DATA_RETRY_CONFIG)) { // Should never happen, log an error and default to a simple linear sequence. loge("createDataConnection: Could not configure using " + "DEFAULT_DATA_RETRY_CONFIG=" + DEFAULT_DATA_RETRY_CONFIG); - rm.configure(20, 2000, 1000); + dc.configureRetry(20, 2000, 1000); } } } else { - if (!rm.configure(SystemProperties.get("ro.gsm.2nd_data_retry_config"))) { - if (!rm.configure(SECONDARY_DATA_RETRY_CONFIG)) { + if (!dc.configureRetry(SystemProperties.get("ro.gsm.2nd_data_retry_config"))) { + if (!dc.configureRetry(SECONDARY_DATA_RETRY_CONFIG)) { // Should never happen, log an error and default to a simple sequence. loge("createDataConnection: Could note configure using " + "SECONDARY_DATA_RETRY_CONFIG=" + SECONDARY_DATA_RETRY_CONFIG); - rm.configure("max_retries=3, 333, 333, 333"); + dc.configureRetry("max_retries=3, 333, 333, 333"); } } } - - int id = mUniqueIdGenerator.getAndIncrement(); - GsmDataConnection conn = GsmDataConnection.makeDataConnection(mPhone, id, rm); - conn.resetRetryCount(); - mDataConnections.put(id, conn); - DataConnectionAc dcac = new DataConnectionAc(conn, LOG_TAG); - int status = dcac.fullyConnectSync(mPhone.getContext(), this, conn.getHandler()); - if (status == AsyncChannel.STATUS_SUCCESSFUL) { - mDataConnectionAsyncChannels.put(dcac.dataConnection.getDataConnectionId(), dcac); - } else { - loge("createDataConnection: Could not connect to dcac.mDc=" + dcac.dataConnection + - " status=" + status); - } - - if (DBG) log("createDataConnection(" + apnType + ") X id=" + id); - return conn; } private void destroyDataConnections() { |