am 77c94113: Data recovery failure due to apn/dc state stuck in "disconnecting"
* commit '77c9411306b6b3d210d22214d596272c9728cf5e': Data recovery failure due to apn/dc state stuck in "disconnecting"
This commit is contained in:
@@ -608,33 +608,6 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
|
|||||||
return allowed;
|
return allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Release the apnContext
|
|
||||||
*
|
|
||||||
* @param apnContext
|
|
||||||
* @param tearDown
|
|
||||||
* @return none
|
|
||||||
*/
|
|
||||||
private void releaseApnContext(ApnContext apnContext, boolean tearDown) {
|
|
||||||
if (apnContext == null) {
|
|
||||||
if (DBG) loge("releaseApnContext: apnContext null should not happen, ignore");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DataConnection dc = apnContext.getDataConnection();
|
|
||||||
if (dc == null) {
|
|
||||||
if (DBG) loge("releaseApnContext: apnContext dc == null should not happen, ignore");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (tearDown) {
|
|
||||||
if (DBG) log("releaseApnContext: tearing down");
|
|
||||||
Message msg = obtainMessage(EVENT_DISCONNECT_DONE, apnContext);
|
|
||||||
apnContext.getDataConnection().tearDown(apnContext.getReason(), msg);
|
|
||||||
}
|
|
||||||
apnContext.setDataConnection(null);
|
|
||||||
apnContext.setDataConnectionAc(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupDataOnReadyApns(String reason) {
|
private void setupDataOnReadyApns(String reason) {
|
||||||
// Only check for default APN state
|
// Only check for default APN state
|
||||||
for (ApnContext apnContext : mApnContexts.values()) {
|
for (ApnContext apnContext : mApnContexts.values()) {
|
||||||
@@ -803,17 +776,17 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DataConnectionAc dcac = apnContext.getDataConnectionAc();
|
DataConnectionAc dcac = apnContext.getDataConnectionAc();
|
||||||
if (dcac != null) {
|
if (tearDown && (dcac != null)) {
|
||||||
if (tearDown) {
|
if (DBG) log("cleanUpConnection: tearing down");
|
||||||
apnContext.setState(State.DISCONNECTING);
|
Message msg = obtainMessage(EVENT_DISCONNECT_DONE, apnContext);
|
||||||
releaseApnContext(apnContext, tearDown);
|
apnContext.getDataConnection().tearDown(apnContext.getReason(), msg);
|
||||||
} else {
|
apnContext.setState(State.DISCONNECTING);
|
||||||
dcac.resetSync();
|
} else {
|
||||||
apnContext.setState(State.IDLE);
|
if (dcac != null) dcac.resetSync();
|
||||||
mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType());
|
apnContext.setState(State.IDLE);
|
||||||
apnContext.setDataConnection(null);
|
mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType());
|
||||||
apnContext.setDataConnectionAc(null);
|
apnContext.setDataConnection(null);
|
||||||
}
|
apnContext.setDataConnectionAc(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1704,7 +1677,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
|
|||||||
apnContext.setState(State.FAILED);
|
apnContext.setState(State.FAILED);
|
||||||
mPhone.notifyDataConnection(Phone.REASON_APN_FAILED, apnContext.getApnType());
|
mPhone.notifyDataConnection(Phone.REASON_APN_FAILED, apnContext.getApnType());
|
||||||
|
|
||||||
releaseApnContext(apnContext, false);
|
apnContext.setDataConnection(null);
|
||||||
|
apnContext.setDataConnectionAc(null);
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
log("onDataSetupComplete: permanent error apn=%s" + apnString );
|
log("onDataSetupComplete: permanent error apn=%s" + apnString );
|
||||||
}
|
}
|
||||||
@@ -1739,6 +1713,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
|
|||||||
|
|
||||||
apnContext.setState(State.IDLE);
|
apnContext.setState(State.IDLE);
|
||||||
apnContext.setApnSetting(null);
|
apnContext.setApnSetting(null);
|
||||||
|
apnContext.setDataConnection(null);
|
||||||
|
apnContext.setDataConnectionAc(null);
|
||||||
|
|
||||||
mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType());
|
mPhone.notifyDataConnection(apnContext.getReason(), apnContext.getApnType());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user