Store phoneId in network requestInfo.
If the SIM is removed, phoneId returned by subscription controller
based on subId is MAX_INT leading to a crash.
Bug: 23315629
Change-Id: I8809cfaaeb6ff78b1e24915e350329b8133d99e9
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcSwitchAsyncChannel.java b/src/java/com/android/internal/telephony/dataconnection/DcSwitchAsyncChannel.java
index ca4656c..461249a 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcSwitchAsyncChannel.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcSwitchAsyncChannel.java
@@ -67,13 +67,15 @@
boolean executed;
final NetworkRequest request;
final int priority;
+ final int phoneId;
private final LocalLog requestLog;
- public RequestInfo(NetworkRequest request, int priority, LocalLog l) {
+ public RequestInfo(NetworkRequest request, int priority, LocalLog l, int phoneId) {
this.request = request;
this.priority = priority;
this.requestLog = l;
this.executed = false;
+ this.phoneId = phoneId;
}
public void log(String str) {
@@ -87,7 +89,7 @@
@Override
public String toString() {
return "[ request=" + request + ", executed=" + executed +
- ", priority=" + priority + "]";
+ ", priority=" + priority + ", phoneId=" + phoneId + "]";
}
}
diff --git a/src/java/com/android/internal/telephony/dataconnection/DctController.java b/src/java/com/android/internal/telephony/dataconnection/DctController.java
index f404971..a3f02e4 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DctController.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DctController.java
@@ -310,12 +310,12 @@
}
}
- private int requestNetwork(NetworkRequest request, int priority, LocalLog l) {
+ private int requestNetwork(NetworkRequest request, int priority, LocalLog l, int phoneId) {
logd("requestNetwork request=" + request
+ ", priority=" + priority);
l.log("Dctc.requestNetwork, priority=" + priority);
- RequestInfo requestInfo = new RequestInfo(request, priority, l);
+ RequestInfo requestInfo = new RequestInfo(request, priority, l, phoneId);
mRequestInfos.put(request.requestId, requestInfo);
processRequests();
@@ -395,7 +395,7 @@
Iterator<Integer> iterator = mRequestInfos.keySet().iterator();
while (iterator.hasNext()) {
RequestInfo requestInfo = mRequestInfos.get(iterator.next());
- if (getRequestPhoneId(requestInfo.request) == requestedPhoneId &&
+ if (requestInfo.phoneId == requestedPhoneId &&
!requestInfo.executed) {
mDcSwitchAsyncChannel[requestedPhoneId].connect(requestInfo);
}
@@ -412,7 +412,7 @@
requestInfo.log("DctController.onExecuteRequest - executed=" + requestInfo.executed);
requestInfo.executed = true;
String apn = apnForNetworkRequest(requestInfo.request);
- int phoneId = getRequestPhoneId(requestInfo.request);
+ int phoneId = requestInfo.phoneId;
PhoneBase phoneBase = (PhoneBase)mPhones[phoneId].getActivePhone();
DcTrackerBase dcTracker = phoneBase.mDcTracker;
dcTracker.incApnRefCount(apn, requestInfo.getLog());
@@ -424,7 +424,7 @@
Iterator<Integer> iterator = mRequestInfos.keySet().iterator();
while (iterator.hasNext()) {
RequestInfo requestInfo = mRequestInfos.get(iterator.next());
- if (getRequestPhoneId(requestInfo.request) == phoneId) {
+ if (requestInfo.phoneId == phoneId) {
onExecuteRequest(requestInfo);
}
}
@@ -436,7 +436,7 @@
requestInfo.log("DctController.onReleaseRequest");
if (requestInfo.executed) {
String apn = apnForNetworkRequest(requestInfo.request);
- int phoneId = getRequestPhoneId(requestInfo.request);
+ int phoneId = requestInfo.phoneId;
PhoneBase phoneBase = (PhoneBase)mPhones[phoneId].getActivePhone();
DcTrackerBase dcTracker = phoneBase.mDcTracker;
dcTracker.decApnRefCount(apn, requestInfo.getLog());
@@ -450,7 +450,7 @@
Iterator<Integer> iterator = mRequestInfos.keySet().iterator();
while (iterator.hasNext()) {
RequestInfo requestInfo = mRequestInfos.get(iterator.next());
- if (getRequestPhoneId(requestInfo.request) == phoneId) {
+ if (requestInfo.phoneId == phoneId) {
onReleaseRequest(requestInfo);
}
}
@@ -522,7 +522,7 @@
for (int i=0; i<mPhoneNum; i++) {
for (RequestInfo requestInfo : mRequestInfos.values()) {
logd("selectExecPhone requestInfo = " + requestInfo);
- if (getRequestPhoneId(requestInfo.request) == i &&
+ if (requestInfo.phoneId == i &&
priority < requestInfo.priority) {
priority = requestInfo.priority;
phoneId = i;
@@ -724,7 +724,8 @@
DcTrackerBase dcTracker =((PhoneBase)mPhone).mDcTracker;
String apn = apnForNetworkRequest(networkRequest);
if (dcTracker.isApnSupported(apn)) {
- requestNetwork(networkRequest, dcTracker.getApnPriority(apn), l);
+ requestNetwork(networkRequest, dcTracker.getApnPriority(apn), l,
+ mPhone.getPhoneId());
} else {
final String str = "Unsupported APN";
log(str);