Merge "Reset scoped session for upload jobs after deferred updates"
[lhc/web/wiklou.git] / includes / jobqueue / Job.php
index 37e3d0f..48d38d9 100644 (file)
@@ -47,6 +47,9 @@ abstract class Job implements IJobSpecification {
        /** @var string Text for error that occurred last */
        protected $error;
 
+       /** @var callable[] */
+       protected $teardownCallbacks = [];
+
        /**
         * Run the job
         * @return bool Success
@@ -279,6 +282,25 @@ abstract class Job implements IJobSpecification {
                return $this->hasRootJobParams() && !empty( $this->params['rootJobIsSelf'] );
        }
 
+       /**
+        * @param callable $callback
+        * @since 1.27
+        */
+       protected function addTeardownCallback( $callback ) {
+               $this->teardownCallbacks[] = $callback;
+       }
+
+       /**
+        * Do any final cleanup after run(), deferred updates, and all DB commits happen
+        *
+        * @since 1.27
+        */
+       public function teardown() {
+               foreach ( $this->teardownCallbacks as $callback ) {
+                       call_user_func( $callback );
+               }
+       }
+
        /**
         * Insert a single job into the queue.
         * @return bool True on success