diff options
Diffstat (limited to 'upgrade.php')
| -rw-r--r-- | upgrade.php | 13 | 
1 files changed, 12 insertions, 1 deletions
| diff --git a/upgrade.php b/upgrade.php index 60764ba93..c5f158c61 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,6 +22,12 @@ 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'); @@ -33,6 +41,9 @@ if (get_input('upgrade') == 'upgrade') {  	elgg_trigger_event('upgrade', 'system', null);  	elgg_invalidate_simplecache();  	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 @@ -53,4 +64,4 @@ if (get_input('upgrade') == 'upgrade') {  	exit;  } -forward();
\ No newline at end of file +forward(); | 
