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
diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java
index 4fd1350..31528e5 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 @@
* 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. */