summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-01-25 21:39:44 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-01-25 21:39:44 +0000
commitbb2af291c55857f581a6d228959dc3e8f99ebfed (patch)
tree2ccabaddebb151e00d16a3abbefea0e3712dd02f
parent675600bd80e7f45e331efd90a73782d5e24158d6 (diff)
parent19a2f24e5f290441e3ef0264b4a6052a917dcce6 (diff)
Merge "Deal gracefully with cancel of nonexistent jobs"
-rw-r--r--services/core/java/com/android/server/job/JobStore.java15
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;