diff options
author | Igor Wiedler <igor@wiedler.ch> | 2010-10-28 21:38:50 +0200 |
---|---|---|
committer | Oleg Pudeyev <oleg@bsdpower.com> | 2011-02-12 22:05:51 -0500 |
commit | 1bfbcb8b7e91f4b36b703eeee7e6eeb99fbca3a0 (patch) | |
tree | e3e2a90750d6871c12b4dc759ece57230c55fb8e /phpBB/includes/cron/lock.php | |
parent | 794d376be4d3587f21bf7149de428a37deaa71c8 (diff) | |
download | forums-1bfbcb8b7e91f4b36b703eeee7e6eeb99fbca3a0.tar forums-1bfbcb8b7e91f4b36b703eeee7e6eeb99fbca3a0.tar.gz forums-1bfbcb8b7e91f4b36b703eeee7e6eeb99fbca3a0.tar.bz2 forums-1bfbcb8b7e91f4b36b703eeee7e6eeb99fbca3a0.tar.xz forums-1bfbcb8b7e91f4b36b703eeee7e6eeb99fbca3a0.zip |
[feature/system-cron] remove cron_ prefix from files
PHPBB3-9596
Diffstat (limited to 'phpBB/includes/cron/lock.php')
-rw-r--r-- | phpBB/includes/cron/lock.php | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/phpBB/includes/cron/lock.php b/phpBB/includes/cron/lock.php new file mode 100644 index 0000000000..64b82128ce --- /dev/null +++ b/phpBB/includes/cron/lock.php @@ -0,0 +1,80 @@ +<?php +/** +* +* @package phpBB3 +* @version $Id$ +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + +/** +* Cron lock class +* @package phpBB3 +*/ +class cron_lock +{ + private $cron_id; + + public function lock() + { + global $config, $db; + + if (!isset($config['cron_lock'])) + { + set_config('cron_lock', '0', true); + } + + // make sure cron doesn't run multiple times in parallel + if ($config['cron_lock']) + { + // if the other process is running more than an hour already we have to assume it + // aborted without cleaning the lock + $time = explode(' ', $config['cron_lock']); + $time = $time[0]; + + if ($time + 3600 >= time()) + { + return false; + } + } + + $this->cron_id = time() . ' ' . unique_id(); + + $sql = 'UPDATE ' . CONFIG_TABLE . " + SET config_value = '" . $db->sql_escape($this->cron_id) . "' + WHERE config_name = 'cron_lock' AND config_value = '" . $db->sql_escape($config['cron_lock']) . "'"; + $db->sql_query($sql); + + // another cron process altered the table between script start and UPDATE query so exit + if ($db->sql_affectedrows() != 1) + { + return false; + } + + return true; + } + + /** + * Releases cron lock. + * + * Attempting to release a cron lock that is already released is harmless. + */ + public function unlock() + { + global $db; + + $sql = 'UPDATE ' . CONFIG_TABLE . " + SET config_value = '0' + WHERE config_name = 'cron_lock' AND config_value = '" . $db->sql_escape($this->cron_id) . "'"; + $db->sql_query($sql); + } +} |