diff options
| author | 2018-01-25 21:39:44 +0000 | |
|---|---|---|
| committer | 2018-01-25 21:39:44 +0000 | |
| commit | bb2af291c55857f581a6d228959dc3e8f99ebfed (patch) | |
| tree | 2ccabaddebb151e00d16a3abbefea0e3712dd02f | |
| parent | 675600bd80e7f45e331efd90a73782d5e24158d6 (diff) | |
| parent | 19a2f24e5f290441e3ef0264b4a6052a917dcce6 (diff) | |
Merge "Deal gracefully with cancel of nonexistent jobs"
| -rw-r--r-- | services/core/java/com/android/server/job/JobStore.java | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java index 6da783ce110b..a24a4ac3823b 100644 --- a/services/core/java/com/android/server/job/JobStore.java +++ b/services/core/java/com/android/server/job/JobStore.java @@ -1052,13 +1052,18 @@ public final class JobStore { final ArraySet<JobStatus> jobs = mJobs.get(uid); final int sourceUid = job.getSourceUid(); final ArraySet<JobStatus> jobsForSourceUid = mJobsPerSourceUid.get(sourceUid); - boolean didRemove = jobs != null && jobs.remove(job) && jobsForSourceUid.remove(job); - if (didRemove) { - if (jobs.size() == 0) { - // no more jobs for this uid; let the now-empty set object be GC'd. + final boolean didRemove = jobs != null && jobs.remove(job); + final boolean sourceRemove = jobsForSourceUid != null && jobsForSourceUid.remove(job); + if (didRemove != sourceRemove) { + Slog.wtf(TAG, "Job presence mismatch; caller=" + didRemove + + " source=" + sourceRemove); + } + if (didRemove || sourceRemove) { + // no more jobs for this uid? let the now-empty set objects be GC'd. + if (jobs != null && jobs.size() == 0) { mJobs.remove(uid); } - if (jobsForSourceUid.size() == 0) { + if (jobsForSourceUid != null && jobsForSourceUid.size() == 0) { mJobsPerSourceUid.remove(sourceUid); } return true; |