diff options
| author | 2011-12-19 16:51:40 -0800 | |
|---|---|---|
| committer | 2011-12-20 17:28:58 -0800 | |
| commit | 2cc19b1cc93a176bf15d83f05e3c43b90bfe279c (patch) | |
| tree | 45005be795921fbdcac13733e44ab64382b95f4f | |
| parent | 01583ef715641c8a3ce68269b091e75adbe9335a (diff) | |
Use shared connections over retries.
Old code would detect we were in a retry loop and ignore other active
connections we could share. We really want live shared connections to
dominate over retrying disconnected ones.
bug:5525764
Change-Id: If93383c52024113eec595b31e46897d1fcabc44c
| -rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java | 5 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java | 71 |
2 files changed, 43 insertions, 33 deletions
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java index 1f24b58ce538..dbb35f25d0b1 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnection.java @@ -36,7 +36,6 @@ public class GsmDataConnection extends DataConnection { //***** Instance Variables protected int mProfileId = RILConstants.DATA_PROFILE_DEFAULT; - protected String mActiveApnType = Phone.APN_TYPE_DEFAULT; //***** Constructor private GsmDataConnection(PhoneBase phone, String name, int id, RetryManager rm) { super(phone, name, id, rm); @@ -113,10 +112,6 @@ public class GsmDataConnection extends DataConnection { return mProfileId; } - public void setActiveApnType(String apnType) { - mActiveApnType = apnType; - } - @Override public String toString() { return "State=" + getCurrentState().getName() + " Apn=" + mApn + diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java index 963db2c6809d..fd85642fafce 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java @@ -993,17 +993,11 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { return false; } - // First, check to see if ApnContext already has DC. - // This could happen if the retries are currently engaged. - dc = (GsmDataConnection)apnContext.getDataConnection(); - if (dc == null) { - - dc = (GsmDataConnection) checkForConnectionForApnContext(apnContext); + dc = (GsmDataConnection) checkForConnectionForApnContext(apnContext); - if (dc == null) { - dc = findReadyDataConnection(apn); - } + if (dc == null) { + dc = findReadyDataConnection(apn); if (dc == null) { if (DBG) log("setupData: No ready GsmDataConnection found!"); @@ -1020,20 +1014,22 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { if (DBG) log("setupData: No free GsmDataConnection found!"); return false; } + } else { + apn = mDataConnectionAsyncChannels.get(dc.getDataConnectionId()).getApnSettingSync(); + } - DataConnectionAc dcac = mDataConnectionAsyncChannels.get(dc.getDataConnectionId()); - dc.setProfileId( profileId ); - dc.setActiveApnType(apnContext.getApnType()); - int refCount = dcac.getRefCountSync(); - if (DBG) log("setupData: init dc and apnContext refCount=" + refCount); + DataConnectionAc dcac = mDataConnectionAsyncChannels.get(dc.getDataConnectionId()); + dc.setProfileId( profileId ); // assumed no connection sharing on profiled types - // configure retry count if no other Apn is using the same connection. - if (refCount == 0) { - configureRetry(dc, apn.canHandleType(Phone.APN_TYPE_DEFAULT)); - } - apnContext.setDataConnectionAc(dcac); - apnContext.setDataConnection(dc); + int refCount = dcac.getRefCountSync(); + if (DBG) log("setupData: init dc and apnContext refCount=" + refCount); + + // configure retry count if no other Apn is using the same connection. + if (refCount == 0) { + configureRetry(dc, apn.canHandleType(Phone.APN_TYPE_DEFAULT)); } + apnContext.setDataConnectionAc(dcac); + apnContext.setDataConnection(dc); apnContext.setApnSetting(apn); apnContext.setState(State.INITING); @@ -1732,27 +1728,46 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { dunSetting = fetchDunApn(); } + DataConnection potential = null; for (ApnContext c : mApnContexts.values()) { DataConnection conn = c.getDataConnection(); if (conn != null) { ApnSetting apnSetting = c.getApnSetting(); if (dunSetting != null) { if (dunSetting.equals(apnSetting)) { - if (DBG) { - log("checkForConnectionForApnContext: apnContext=" + apnContext + - " found conn=" + conn); + switch (c.getState()) { + case CONNECTED: + if (DBG) { + log("checkForConnectionForApnContext: apnContext=" + + apnContext + " found conn=" + conn); + } + return conn; + case CONNECTING: + potential = conn; } - return conn; } } else if (apnSetting != null && apnSetting.canHandleType(apnType)) { - if (DBG) { - log("checkForConnectionForApnContext: apnContext=" + apnContext + - " found conn=" + conn); + switch (c.getState()) { + case CONNECTED: + if (DBG) { + log("checkForConnectionForApnContext: apnContext=" + apnContext + + " found conn=" + conn); + } + return conn; + case CONNECTING: + potential = conn; } - return conn; } } } + if (potential != null) { + if (DBG) { + log("checkForConnectionForApnContext: apnContext=" + apnContext + + " found conn=" + potential); + } + return potential; + } + if (DBG) log("checkForConnectionForApnContext: apnContext=" + apnContext + " NO conn"); return null; } |