diff --git a/core/lib/Drupal/Core/Extension/UpdateModuleHandler.php b/core/lib/Drupal/Core/Extension/UpdateModuleHandler.php
index 42fbd2a..4b2dce5 100644
--- a/core/lib/Drupal/Core/Extension/UpdateModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/UpdateModuleHandler.php
@@ -17,10 +17,29 @@
  */
 class UpdateModuleHandler extends ModuleHandler {
 
+  protected $locked = FALSE;
+
+  public function isLocked() {
+    return $this->locked;
+  }
+
+  public function lock() {
+    $this->locked = TRUE;
+    return $this;
+  }
+
+  public function unlock() {
+    $this->locked = FALSE;
+    return $this;
+  }
+
   /**
    * {@inheritdoc}
    */
   public function getImplementations($hook) {
+    if (!$this->isLocked) {
+      return parent::getImplementations($hook);
+    }
     if (substr($hook, -6) === '_alter') {
       return array();
     }
diff --git a/core/update.php b/core/update.php
index 45904a2..106a135 100644
--- a/core/update.php
+++ b/core/update.php
@@ -427,7 +427,9 @@ function update_task_list($active = NULL) {
         // update.php correctly by default.
         $batch_url = $base_root . drupal_current_script_url();
         $redirect_url = $base_root . drupal_current_script_url(array('op' => 'results'));
+        \Drupal::moduleHandler()->lock();
         $output = update_batch($request->request->get('start'), $redirect_url, $batch_url);
+        \Drupal::moduleHandler()->unlock();
         break;
       }
 
