aboutsummaryrefslogtreecommitdiff
path: root/upgrade.php
diff options
context:
space:
mode:
Diffstat (limited to 'upgrade.php')
-rw-r--r--upgrade.php28
1 files changed, 23 insertions, 5 deletions
diff --git a/upgrade.php b/upgrade.php
index eee26e793..d07b2a1da 100644
--- a/upgrade.php
+++ b/upgrade.php
@@ -9,6 +9,8 @@
* new version of the script. Deleting the script is not a requirement and
* leaving it behind does not affect the security of the site.
*
+ * Upgrades use a table {db_prefix}upgrade_lock as a mutex to prevent concurrent upgrades.
+ *
* @package Elgg.Core
* @subpackage Upgrade
*/
@@ -20,17 +22,33 @@ define('UPGRADING', 'upgrading');
require_once(dirname(__FILE__) . "/engine/start.php");
if (get_input('upgrade') == 'upgrade') {
+ // prevent someone from running the upgrade script in parallel (see #4643)
+ if (!_elgg_upgrade_lock()) {
+ register_error(elgg_echo('upgrade:locked'));
+ forward();
+ }
+
+ // disable the system log for upgrades to avoid exceptions when the schema changes.
+ elgg_unregister_event_handler('log', 'systemlog', 'system_log_default_logger');
+ elgg_unregister_event_handler('all', 'all', 'system_log_listener');
+
if (elgg_get_unprocessed_upgrades()) {
version_upgrade();
}
+
+ // turn off time limit so plugins that have upgrade scripts aren't interrupted
+ set_time_limit(0);
elgg_trigger_event('upgrade', 'system', null);
elgg_invalidate_simplecache();
- elgg_filepath_cache_reset();
+ elgg_reset_system_cache();
+
+ _elgg_upgrade_unlock();
+
} else {
// if upgrading from < 1.8.0, check for the core view 'welcome' and bail if it's found.
- // see http://trac.elgg.org/ticket/3064
- // we're checking the exact view location because it's likely themes will have this view.
- // we're only concerned with core.
+ // see https://github.com/elgg/elgg/issues/3064
+ // we're not checking the view itself because it's likely themes will override this view.
+ // we're only concerned with core files.
$welcome = dirname(__FILE__) . '/views/default/welcome.php';
if (file_exists($welcome)) {
elgg_set_viewtype('failsafe');
@@ -46,4 +64,4 @@ if (get_input('upgrade') == 'upgrade') {
exit;
}
-forward(); \ No newline at end of file
+forward();