From 807dab2cb3f619742e29a8e5bcd17268481e8dcd Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Fri, 25 Mar 2022 20:15:52 +0000 Subject: [PATCH] Only clear preferred UID at appropriate times. The preferred UID is set when we call JobServiceContext.cancel(...PREEMPT), so clearing the preferred UID before that call is pointless. Also, make sure not to clear the preferred for contexts that are only going to be used to transfer jobs to the preferred UID. Bug: 141645789 Bug: 204924801 Test: Android builds Change-Id: I18db34a389919432b604d68f90a6901d9e6f9cba --- .../java/com/android/server/job/JobConcurrencyManager.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java index dfd019d9fa9e..1b2cdb86aee7 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java @@ -686,9 +686,6 @@ class JobConcurrencyManager { stoppable.removeAt(s); assignment.newJob = nextPending; assignment.newWorkType = replaceWorkType; - // Don't preserve the UID since we're stopping the job because - // something is pending (eg. EJs). - assignment.context.clearPreferredUid(); break; } } @@ -769,20 +766,20 @@ class JobConcurrencyManager { } for (int s = stoppable.size() - 1; s >= 0; --s) { final ContextAssignment assignment = stoppable.valueAt(s); + // The preferred UID is set when we cancel with PREEMPT reason, but don't preserve the + // UID for any stoppable contexts since we want to open the context up to any/all apps. assignment.context.clearPreferredUid(); assignment.clear(); mContextAssignmentPool.release(assignment); } for (int p = preferredUidOnly.size() - 1; p >= 0; --p) { final ContextAssignment assignment = preferredUidOnly.valueAt(p); - assignment.context.clearPreferredUid(); assignment.clear(); mContextAssignmentPool.release(assignment); } for (int i = idle.size() - 1; i >= 0; --i) { final ContextAssignment assignment = idle.valueAt(i); mIdleContexts.add(assignment.context); - assignment.context.clearPreferredUid(); assignment.clear(); mContextAssignmentPool.release(assignment); }