diff --git a/core/includes/common.inc b/core/includes/common.inc
index 422c79fd7178db6aead13eab8a37987ba1b5eb18..80cfade9a2d9ec51e161e30960e6cb8540522090 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -1199,11 +1199,11 @@ function l($text, $path, array $options = array()) {
  * into script execution a call such as set_time_limit(20) is made, the
  * script will run for a total of 45 seconds before timing out.
  *
- * It also means that it is possible to decrease the total time limit if
- * the sum of the new time limit and the current time spent running the
- * script is inferior to the original time limit. It is inherent to the way
- * set_time_limit() works, it should rather be called with an appropriate
- * value every time you need to allocate a certain amount of time
+ * If the current time limit is not unlimited it is possible to decrease the
+ * total time limit if the sum of the new time limit and the current time spent
+ * running the script is inferior to the original time limit. It is inherent to
+ * the way set_time_limit() works, it should rather be called with an
+ * appropriate value every time you need to allocate a certain amount of time
  * to execute a task than only once at the beginning of the script.
  *
  * Before calling set_time_limit(), we check if this function is available
@@ -1220,7 +1220,11 @@ function l($text, $path, array $options = array()) {
  */
 function drupal_set_time_limit($time_limit) {
   if (function_exists('set_time_limit')) {
-    @set_time_limit($time_limit);
+    $current = ini_get('max_execution_time');
+    // Do not set time limit if it is currently unlimited.
+    if ($current !== 0) {
+      @set_time_limit($time_limit);
+    }
   }
 }