From 998fb4e80e2edad9baf5c07432442b6418e2674c Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Wed, 17 Jan 2018 14:40:38 -0800 Subject: [PATCH] Make sure to mutex around job-set iteration If something mucks with the job set while we're iterating through it, we're going to have a bad day. Change-Id: I2e5603f4dd025b2e1819c7e84d59882bad98ae7a Fixes: 72105511 Test: atest CtsJobSchedulerTestCases Test: atest FrameworksServicesTests:com.android.server.job.BackgroundRestrictionsTest --- .../job/controllers/BackgroundJobsController.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/job/controllers/BackgroundJobsController.java b/services/core/java/com/android/server/job/controllers/BackgroundJobsController.java index 5f95f1a82fa8..1d053a500f92 100644 --- a/services/core/java/com/android/server/job/controllers/BackgroundJobsController.java +++ b/services/core/java/com/android/server/job/controllers/BackgroundJobsController.java @@ -17,14 +17,11 @@ package com.android.server.job.controllers; import android.content.Context; -import android.os.IDeviceIdleController; -import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.util.Slog; import android.util.proto.ProtoOutputStream; -import com.android.internal.util.ArrayUtils; import com.android.server.ForceAppStandbyTracker; import com.android.server.ForceAppStandbyTracker.Listener; import com.android.server.job.JobSchedulerService; @@ -44,7 +41,6 @@ public final class BackgroundJobsController extends StateController { private static volatile BackgroundJobsController sController; private final JobSchedulerService mJobSchedulerService; - private final IDeviceIdleController mDeviceIdleController; private final ForceAppStandbyTracker mForceAppStandbyTracker; @@ -62,8 +58,6 @@ public final class BackgroundJobsController extends StateController { private BackgroundJobsController(JobSchedulerService service, Context context, Object lock) { super(service, context, lock); mJobSchedulerService = service; - mDeviceIdleController = IDeviceIdleController.Stub.asInterface( - ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); mForceAppStandbyTracker = ForceAppStandbyTracker.getInstance(context); @@ -235,17 +229,23 @@ public final class BackgroundJobsController extends StateController { private final Listener mForceAppStandbyListener = new Listener() { @Override public void updateAllJobs() { - updateAllJobRestrictionsLocked(); + synchronized (mLock) { + updateAllJobRestrictionsLocked(); + } } @Override public void updateJobsForUid(int uid) { - updateJobRestrictionsForUidLocked(uid); + synchronized (mLock) { + updateJobRestrictionsForUidLocked(uid); + } } @Override public void updateJobsForUidPackage(int uid, String packageName) { - updateJobRestrictionsForUidLocked(uid); + synchronized (mLock) { + updateJobRestrictionsForUidLocked(uid); + } } }; } -- 2.11.0