From 4c5c6f43dd81031c2501e35b355fad5ebbf0ab87 Mon Sep 17 00:00:00 2001 From: Ronnie Leng Date: Wed, 25 Mar 2015 10:57:24 -0500 Subject: [PATCH] [ProcessStas] fix index out of bounds when add duration. Root Cause: There is a defect in current ProcessStats design and following is the scenario: 1. Process A is started due to activity with name of A 2. Process A creates ProessState with application uid of A 3. Process B is started due to isolated service declared in application A with name of A 4. Process B uses ProcessState of Process A as it uses same application uid of A 5. Process B is finished and it leads to ProcessState marked as dead 6. Process A still keeps using the invalid ProcessState in dead state 7. IndexOutOfBoundsException is triggered when system tries to update process state of Process A Resolution: use process uid to replace application uid for getProcessStatLocked. Change-Id: I881ad9fc492c9e1a892c9e957180cebcfef8352d Signed-off-by: Ronnie Leng --- .../core/java/com/android/server/am/ProcessRecord.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index a6c616ae8de2c..93591fe02502b 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -418,7 +418,7 @@ final class ProcessRecord { tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList); origBase.makeInactive(); } - baseProcessTracker = tracker.getProcessStateLocked(info.packageName, info.uid, + baseProcessTracker = tracker.getProcessStateLocked(info.packageName, uid, info.versionCode, processName); baseProcessTracker.makeActive(); for (int i=0; i