From 3eddecc3bc6e4f9f2d9b6a64d6d1f0addfb286a4 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Wed, 25 May 2016 10:44:24 -0700 Subject: Build JobStatus objects outside the lock Constructing a JobStatus can be a surprisingly heavy operation, potentially involving IPC; so do so outside the primary lock when possible in order to reduce lock contention. Bug 28946245 Change-Id: I51fffa6d29d566647edb583ae6e46ed6038d36e3 --- services/core/java/com/android/server/job/JobServiceContext.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java index 4fd1350b5d1a..31528e509012 100644 --- a/services/core/java/com/android/server/job/JobServiceContext.java +++ b/services/core/java/com/android/server/job/JobServiceContext.java @@ -223,10 +223,11 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne * stop executing. */ JobStatus getRunningJob() { + final JobStatus job; synchronized (mLock) { - return mRunningJob == null ? - null : new JobStatus(mRunningJob); + job = mRunningJob; } + return job == null ? null : new JobStatus(job); } /** Called externally when a job that was scheduled for execution should be cancelled. */ -- cgit v1.2.3-59-g8ed1b