OSDN Git Service

NPE fix for JobScheduler
authorShreyas Basarge <snb@google.com>
Mon, 22 Feb 2016 22:29:39 +0000 (22:29 +0000)
committerMatthew Williams <mjwilliams@google.com>
Wed, 24 Feb 2016 21:30:14 +0000 (21:30 +0000)
Add a null check before setting stop
reason for job parameters.

Bug: 27166522
Change-Id: I8b829c0cf8df7da0b8118ab75779f209d0af1b22

services/core/java/com/android/server/job/JobServiceContext.java

index b249739..286ddbe 100644 (file)
@@ -368,6 +368,13 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne
                     }
                     break;
                 case MSG_CANCEL:
+                    if (mVerb == VERB_FINISHED) {
+                        if (DEBUG) {
+                            Slog.d(TAG,
+                                   "Trying to process cancel for torn-down context, ignoring.");
+                        }
+                        return;
+                    }
                     mParams.setStopReason(message.arg1);
                     if (message.arg1 == JobParameters.REASON_PREEMPT) {
                         mPreferredUid = mRunningJob != null ? mRunningJob.getUid() :
@@ -477,12 +484,6 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne
          *     _ENDING     -> No point in doing anything here, so we ignore.
          */
         private void handleCancelH() {
-            if (mRunningJob == null) {
-                if (DEBUG) {
-                    Slog.d(TAG, "Trying to process cancel for torn-down context, ignoring.");
-                }
-                return;
-            }
             if (JobSchedulerService.DEBUG) {
                 Slog.d(TAG, "Handling cancel for: " + mRunningJob.getJobId() + " "
                         + VERB_STRINGS[mVerb]);
@@ -510,7 +511,6 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne
 
         /** Process MSG_TIMEOUT here. */
         private void handleOpTimeoutH() {
-            mParams.setStopReason(JobParameters.REASON_TIMEOUT);
             switch (mVerb) {
                 case VERB_BINDING:
                     Slog.e(TAG, "Time-out while trying to bind " + mRunningJob.toShortString() +
@@ -535,6 +535,7 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne
                     // Not an error - client ran out of time.
                     Slog.i(TAG, "Client timed out while executing (no jobFinished received)." +
                             " sending onStop. "  + mRunningJob.toShortString());
+                    mParams.setStopReason(JobParameters.REASON_TIMEOUT);
                     sendStopMessageH();
                     break;
                 default: