diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 7e95a03..2384162 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -2781,7 +2781,7 @@ function hook_install() {
 }
 
 /**
- * Perform a single update.
+ * Perform a single module-related database update.
  *
  * For each change that requires one or more actions to be performed when
  * updating a site, add a new hook_update_N(), which will be called by
@@ -2846,12 +2846,14 @@ function hook_install() {
  *   In case of error, update hooks should throw an instance of
  *   Drupal\Core\Utility\UpdateException with a meaningful message for the user.
  *   If a database query fails for whatever reason, it will throw a
- *   PDOException.
+ *   PDOException. When an exception is raised in an update hook, the update
+ *   process for the module is aborted and subsequent update hooks for the
+ *   module will not be executed. The updates will still be marked as 'pending',
+ *   and will run be tried again on the next execution of update.php.
  *
  * @return
- *   Optionally, update hooks may return a translated string that will be
- *   displayed to the user after the update has completed. If no message is
- *   returned, no message will be presented to the user.
+ *   Update hooks may optionally return a translated string to be displayed on
+ *   the update results page.
  *
  * @see batch
  * @see schemaapi
@@ -2860,50 +2862,55 @@ function hook_install() {
  * @see update_get_update_list()
  */
 function hook_update_N(&$sandbox) {
-  // For non-multipass updates, the signature can simply be;
-  // function hook_update_N() {
-
   // For most updates, the following is sufficient.
   db_add_field('mytable1', 'newcol', array('type' => 'int', 'not null' => TRUE, 'description' => 'My new integer column.'));
 
-  // However, for more complex operations that may take a long time,
-  // you may hook into Batch API as in the following example.
+  // To display a message to the user when the update is completed, return it.
+  // If you do not want to display a completion message, return nothing.
+  return t('The update did what it was supposed to do.');
+
+  // In case of an error, throw an exception with an error message.
+  throw new DrupalUpdateException('Something went wrong; here is what you should do.');
 
-  // Update 3 users at a time to have an exclamation point after their names.
-  // (They're really happy that we can do batch API in this hook!)
+  // For more complex operations that may take a long time, the update should
+  // be multipass, as in the following example.
+
+  // Append an exclamation mark to all user names. Users will be processed by
+  // groups of 3.
+
+  // First call: Initialize some internal information to let us track our
+  // progress.
   if (!isset($sandbox['progress'])) {
     $sandbox['progress'] = 0;
     $sandbox['current_uid'] = 0;
-    // We'll -1 to disregard the uid 0...
+    // Subtract 1 to disregard uid 0...
     $sandbox['max'] = db_query('SELECT COUNT(DISTINCT uid) FROM {users}')->fetchField() - 1;
   }
 
-  $users = db_select('users', 'u')
-    ->fields('u', array('uid', 'name'))
-    ->condition('uid', $sandbox['current_uid'], '>')
-    ->range(0, 3)
-    ->orderBy('uid', 'ASC')
-    ->execute();
-
-  foreach ($users as $user) {
-    $user->name .= '!';
-    db_update('users')
-      ->fields(array('name' => $user->name))
-      ->condition('uid', $user->uid)
+  // If there are actually users to process...
+  if ($sandbox['max']) {
+    // Retrieve the next 3 users. Note the 'uid > $sandbox['current_uid']' condition.
+    $users = db_select('users', 'u')
+      ->fields('u', array('uid', 'name'))
+      ->condition('uid', $sandbox['current_uid'], '>')
+      ->range(0, 3)
+      ->orderBy('uid', 'ASC')
       ->execute();
 
-    $sandbox['progress']++;
-    $sandbox['current_uid'] = $user->uid;
-  }
-
-  $sandbox['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']);
+    foreach ($users as $user) {
+      $user->name .= '!';
+      db_update('users')
+        ->fields(array('name' => $user->name))
+        ->condition('uid', $user->uid)
+        ->execute();
 
-  // To display a message to the user when the update is completed, return it.
-  // If you do not want to display a completion message, simply return nothing.
-  return t('The update did what it was supposed to do.');
+      $sandbox['progress']++;
+      $sandbox['current_uid'] = $user->uid;
+    }
 
-  // In case of an error, simply throw an exception with an error message.
-  throw new UpdateException('Something went wrong; here is what you should do.');
+    // Report our completion level.
+    $sandbox['#finished'] = $sandbox['progress'] / $sandbox['max'];
+  }
 }
 
 /**
