diff options
| author | 2014-06-12 20:51:28 +0000 | |
|---|---|---|
| committer | 2014-06-12 03:30:50 +0000 | |
| commit | 78b9654311c9966a1d20efe2ddcb4649886b27e3 (patch) | |
| tree | 2b0d28f75cbf79e5a054cf6371e2b63fbc5159f7 | |
| parent | 0c447bf3b2ddab9e59759b539125f6f2fe05c367 (diff) | |
| parent | 49a85b64f7c29a5dfbf27112ff22987b85c59338 (diff) | |
Merge "JobScheduler blocking main thread." into lmp-preview-dev
| -rw-r--r-- | services/core/java/com/android/server/job/JobServiceContext.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/job/JobStore.java | 14 | 
2 files changed, 11 insertions, 6 deletions
| diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java index 92b643cd6e7a..534faba3b013 100644 --- a/services/core/java/com/android/server/job/JobServiceContext.java +++ b/services/core/java/com/android/server/job/JobServiceContext.java @@ -481,11 +481,10 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne           */          private void closeAndCleanupJobH(boolean reschedule) {              removeMessages(MSG_TIMEOUT); +            mCompletedListener.onJobCompleted(mRunningJob, reschedule);              synchronized (mLock) {                  mWakeLock.release();                  mContext.unbindService(JobServiceContext.this); -                mCompletedListener.onJobCompleted(mRunningJob, reschedule); -                  mWakeLock = null;                  mRunningJob = null;                  mParams = null; diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java index 5f22b346124e..4ac26c1f634e 100644 --- a/services/core/java/com/android/server/job/JobStore.java +++ b/services/core/java/com/android/server/job/JobStore.java @@ -262,16 +262,23 @@ public class JobStore {          @Override          public void run() {              final long startElapsed = SystemClock.elapsedRealtime(); +            List<JobStatus> mStoreCopy = new ArrayList<JobStatus>();              synchronized (JobStore.this) { -                writeJobsMapImpl(); +                // Copy over the jobs so we can release the lock before writing. +                for (JobStatus jobStatus : mJobSet) { +                    JobStatus copy = new JobStatus(jobStatus.getJob(), jobStatus.getUid(), +                            jobStatus.getEarliestRunTime(), jobStatus.getLatestRunTimeElapsed()); +                    mStoreCopy.add(copy); +                }              } +            writeJobsMapImpl(mStoreCopy);              if (JobSchedulerService.DEBUG) {                  Slog.v(TAG, "Finished writing, took " + (SystemClock.elapsedRealtime()                          - startElapsed) + "ms");              }          } -        private void writeJobsMapImpl() { +        private void writeJobsMapImpl(List<JobStatus> jobList) {              try {                  ByteArrayOutputStream baos = new ByteArrayOutputStream();                  XmlSerializer out = new FastXmlSerializer(); @@ -281,8 +288,7 @@ public class JobStore {                  out.startTag(null, "job-info");                  out.attribute(null, "version", Integer.toString(JOBS_FILE_VERSION)); -                for (int i = 0; i < mJobSet.size(); i++) { -                    final JobStatus jobStatus = mJobSet.valueAt(i); +                for (JobStatus jobStatus : jobList) {                      if (DEBUG) {                          Slog.d(TAG, "Saving job " + jobStatus.getJobId());                      } |