diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index b25832c7d5212..25db58ed62613 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -1745,7 +1745,13 @@ public class JobSchedulerService extends com.android.server.SystemService // Remove from store as well as controllers. final boolean removed = mJobs.remove(jobStatus, removeFromPersisted); - if (removed && mReadyToRock) { + if (!removed) { + // We never create JobStatus objects for the express purpose of removing them, and this + // method is only ever called for jobs that were saved in the JobStore at some point, + // so if we can't find it, something went seriously wrong. + Slog.wtfStack(TAG, "Job didn't exist in JobStore"); + } + if (mReadyToRock) { for (int i = 0; i < mControllers.size(); i++) { StateController controller = mControllers.get(i); controller.maybeStopTrackingJobLocked(jobStatus, incomingJob, false); diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java index 2a79ec4587fcb..f7fe9cab60ae3 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java @@ -992,6 +992,10 @@ public final class JobServiceContext implements ServiceConnection { if (mVerb == VERB_FINISHED) { return; } + if (DEBUG) { + Slog.d(TAG, "Cleaning up " + mRunningJob.toShortString() + + " reschedule=" + reschedule + " reason=" + reason); + } applyStoppedReasonLocked(reason); completedJob = mRunningJob; final int internalStopReason = mParams.getInternalStopReasonCode();