aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/cron
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2011-01-07 20:58:28 +0100
committerOleg Pudeyev <oleg@bsdpower.com>2011-02-12 22:05:53 -0500
commit3a3a8bb96d0cb7be2529ab095f305fd3b042783c (patch)
treee8bc13cacb8ab2f9803c2d13d55025e4903e4d7f /phpBB/includes/cron
parent6e5e4721d83c8bde9780b02bd011bdbf5d188dea (diff)
downloadforums-3a3a8bb96d0cb7be2529ab095f305fd3b042783c.tar
forums-3a3a8bb96d0cb7be2529ab095f305fd3b042783c.tar.gz
forums-3a3a8bb96d0cb7be2529ab095f305fd3b042783c.tar.bz2
forums-3a3a8bb96d0cb7be2529ab095f305fd3b042783c.tar.xz
forums-3a3a8bb96d0cb7be2529ab095f305fd3b042783c.zip
[feature/system-cron] Abstract the database locking mechanism out of cron.
Added a number of tests for the locking mechanism which can now lock arbitrary config variables. PHPBB3-9596
Diffstat (limited to 'phpBB/includes/cron')
-rw-r--r--phpBB/includes/cron/lock.php104
1 files changed, 0 insertions, 104 deletions
diff --git a/phpBB/includes/cron/lock.php b/phpBB/includes/cron/lock.php
deleted file mode 100644
index 27b8b425c1..0000000000
--- a/phpBB/includes/cron/lock.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-/**
-*
-* @package phpBB3
-* @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 phpbb_cron_lock
-{
- /**
- * Unique identifier for this lock.
- *
- * @var string
- */
- private $cron_id;
-
- /**
- * Tries to acquire the cron lock by updating
- * the 'cron_lock' configuration variable in the database.
- *
- * As a lock may only be held by one process at a time, lock
- * acquisition may fail if another process is holding the lock
- * or if another process obtained the lock but never released it.
- * Locks are forcibly released after a timeout of 1 hour.
- *
- * @return bool true if lock was acquired
- * false otherwise
- */
- 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 the cron lock.
- *
- * The lock must have been previously obtained, that is, lock() call
- * was issued and returned true.
- *
- * Note: Attempting to release a cron lock that is already released,
- * that is, calling unlock() multiple times, is harmless.
- *
- * @return void
- */
- 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);
- }
-}