diff options
Diffstat (limited to 'upgrade.php')
| -rw-r--r-- | upgrade.php | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/upgrade.php b/upgrade.php index ab769f542..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 not 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(); |
