Merge "Fix NPE due to missing ProcessItem.mPackageInfo"

This commit is contained in:
Dianne Hackborn
2011-07-13 16:36:23 -07:00
committed by Android Code Review

View File

@@ -756,6 +756,7 @@ public class RunningState {
} }
// Look for services and their primary processes that no longer exist... // Look for services and their primary processes that no longer exist...
ArrayList<Integer> uidToDelete = null;
for (int i=0; i<mServiceProcessesByName.size(); i++) { for (int i=0; i<mServiceProcessesByName.size(); i++) {
HashMap<String, ProcessItem> procs = mServiceProcessesByName.valueAt(i); HashMap<String, ProcessItem> procs = mServiceProcessesByName.valueAt(i);
Iterator<ProcessItem> pit = procs.values().iterator(); Iterator<ProcessItem> pit = procs.values().iterator();
@@ -772,7 +773,10 @@ public class RunningState {
changed = true; changed = true;
pit.remove(); pit.remove();
if (procs.size() == 0) { if (procs.size() == 0) {
mServiceProcessesByName.remove(mServiceProcessesByName.keyAt(i)); if (uidToDelete == null) {
uidToDelete = new ArrayList<Integer>();
}
uidToDelete.add(mServiceProcessesByName.keyAt(i));
} }
if (pi.mPid != 0) { if (pi.mPid != 0) {
mServiceProcessesByPid.remove(pi.mPid); mServiceProcessesByPid.remove(pi.mPid);
@@ -790,6 +794,13 @@ public class RunningState {
} }
} }
if (uidToDelete != null) {
for (int i = 0; i < uidToDelete.size(); i++) {
int uid = uidToDelete.get(i);
mServiceProcessesByName.remove(uid);
}
}
if (changed) { if (changed) {
// First determine an order for the services. // First determine an order for the services.
ArrayList<ProcessItem> sortedProcesses = new ArrayList<ProcessItem>(); ArrayList<ProcessItem> sortedProcesses = new ArrayList<ProcessItem>();