diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java index 6da783ce110b5..a24a4ac3823bf 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 jobs = mJobs.get(uid); final int sourceUid = job.getSourceUid(); final ArraySet 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;