summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2009-08-05 15:58:35 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2009-08-05 15:58:35 +0000
commit691693304b0ccafda3c2002452a8b8b8afe729f3 (patch)
tree05ec348e8292f40bdf34e3aa259b3bfe2fd0f580
parentc3081764c3eabeed2318b7302339d52a21eb92f0 (diff)
downloadbrdo-691693304b0ccafda3c2002452a8b8b8afe729f3.tar.gz
brdo-691693304b0ccafda3c2002452a8b8b8afe729f3.tar.bz2
#193383 by TheRec, JirkaRybka, and Bart Jansens: Centralize calls to set_time_limit() and prevent warnings/errors.
-rw-r--r--includes/common.inc38
-rw-r--r--includes/locale.inc6
-rw-r--r--modules/node/node.module7
-rw-r--r--modules/simpletest/drupal_web_test_case.php2
-rwxr-xr-xscripts/run-tests.sh6
5 files changed, 42 insertions, 17 deletions
diff --git a/includes/common.inc b/includes/common.inc
index 205932b36..bad796820 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -2295,6 +2295,38 @@ function drupal_map_assoc($array, $function = NULL) {
}
/**
+ * Attempts to set the PHP maximum execution time.
+ *
+ * This function is a wrapper around the PHP function set_time_limit().
+ * When called, set_time_limit() restarts the timeout counter from zero.
+ * In other words, if the timeout is the default 30 seconds, and 25 seconds
+ * 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
+ * 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
+ * because it could be disabled by the server administrator. We also hide all
+ * the errors that could occur when calling set_time_limit(), because it is
+ * not possible to reliably ensure that PHP or a security extension will
+ * not issue a warning/error if they prevent the use of this function.
+ *
+ * @param $time_limit
+ * An integer specifying the new time limit, in seconds. A value of 0
+ * indicates unlimited execution time.
+ */
+function drupal_set_time_limit($time_limit) {
+ if (function_exists('set_time_limit')) {
+ @set_time_limit($time_limit);
+ }
+}
+
+/**
* Returns the path to a system item (module, theme, etc.).
*
* @param $type
@@ -3555,10 +3587,8 @@ function drupal_cron_run() {
// Allow execution to continue even if the request gets canceled.
@ignore_user_abort(TRUE);
- // Try to increase the maximum execution time if it is too low.
- if (ini_get('max_execution_time') < 240) {
- @set_time_limit(240);
- }
+ // Try to allocate enough time to run all the hook_cron implementations.
+ drupal_set_time_limit(240);
// Fetch the cron semaphore
$semaphore = variable_get('cron_semaphore', FALSE);
diff --git a/includes/locale.inc b/includes/locale.inc
index 4adbae975..1c79636c6 100644
--- a/includes/locale.inc
+++ b/includes/locale.inc
@@ -1167,10 +1167,8 @@ function locale_add_language($langcode, $name = NULL, $native = NULL, $direction
* Text group to import PO file into (eg. 'default' for interface translations)
*/
function _locale_import_po($file, $langcode, $mode, $group = NULL) {
- // If not in 'safe mode', increase the maximum execution time.
- if (!ini_get('safe_mode')) {
- set_time_limit(240);
- }
+ // Try to allocate enough time to parse and import the data.
+ drupal_set_time_limit(240);
// Check if we have the language already in the database.
if (!db_query("SELECT COUNT(language) FROM {languages} WHERE language = :language", array(':language' => $langcode))->fetchField()) {
diff --git a/modules/node/node.module b/modules/node/node.module
index 5d8f3b5a7..5534d0b3c 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -2652,10 +2652,9 @@ function node_access_rebuild($batch_mode = FALSE) {
batch_set($batch);
}
else {
- // If not in 'safe mode', increase the maximum execution time.
- if (!ini_get('safe_mode')) {
- set_time_limit(240);
- }
+ // Try to allocate enough time to rebuild node grants
+ drupal_set_time_limit(240);
+
$nids = db_query("SELECT nid FROM {node}")->fetchCol();
foreach ($nids as $nid) {
$node = node_load($nid, NULL, TRUE);
diff --git a/modules/simpletest/drupal_web_test_case.php b/modules/simpletest/drupal_web_test_case.php
index 4af15d36a..5bb6c51a9 100644
--- a/modules/simpletest/drupal_web_test_case.php
+++ b/modules/simpletest/drupal_web_test_case.php
@@ -1110,7 +1110,7 @@ class DrupalWebTestCase extends DrupalTestCase {
// directory will have been created already.
variable_set('file_directory_path', $directory);
- set_time_limit($this->timeLimit);
+ drupal_set_time_limit($this->timeLimit);
}
/**
diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh
index 37d3c4399..26d724492 100755
--- a/scripts/run-tests.sh
+++ b/scripts/run-tests.sh
@@ -70,10 +70,8 @@ if ($args['list']) {
$test_list = simpletest_script_get_test_list();
-// If not in 'safe mode', increase the maximum execution time.
-if (!ini_get('safe_mode')) {
- set_time_limit(0);
-}
+// Try to allocate unlimited time to run the tests.
+drupal_set_time_limit(0);
simpletest_script_reporter_init();