diff options
| author | Nathan Guse <nathaniel.guse@gmail.com> | 2013-09-05 13:56:57 -0500 |
|---|---|---|
| committer | Nathan Guse <nathaniel.guse@gmail.com> | 2013-09-05 13:56:57 -0500 |
| commit | e8ab8fe0bc7d087fe3c9b5d2a3e545f228bb3096 (patch) | |
| tree | 6a053afa0a156204112b480707608cac60770ac5 /phpBB/includes/lock | |
| parent | abaa53b0b295358efcf591587485c01a027cd5cb (diff) | |
| parent | dd86e8d0ae0179cf50076cdb1a8020266b6432a5 (diff) | |
| download | forums-e8ab8fe0bc7d087fe3c9b5d2a3e545f228bb3096.tar forums-e8ab8fe0bc7d087fe3c9b5d2a3e545f228bb3096.tar.gz forums-e8ab8fe0bc7d087fe3c9b5d2a3e545f228bb3096.tar.bz2 forums-e8ab8fe0bc7d087fe3c9b5d2a3e545f228bb3096.tar.xz forums-e8ab8fe0bc7d087fe3c9b5d2a3e545f228bb3096.zip | |
Merge branch 'develop' of github.com:phpbb/phpbb3 into ticket/8323
# By Joas Schilling (613) and others
# Via Andreas Fischer (214) and others
* 'develop' of github.com:phpbb/phpbb3: (2494 commits)
[ticket/11825] Move schema_data.php into includes/ instead of phpbb/
[ticket/11215] Remove unnecessary comment
[ticket/11755] MySQL upgrader out of date
[prep-release-3.0.12] Update Changelog for 3.0.12-RC3 release.
[prep-release-3.0.12] Bumping version number for 3.0.12-RC3.
[ticket/11823] Set up nginx server to match PHP files with characters after .php
[ticket/11812] Fix empty define
[ticket/11818] Update Symfony dependencies to 2.3.*
[ticket/11791] Load adm/ events from styles/adm/event/
[ticket/11215] Fix helper_url_test.php tests
[ticket/11215] Add newline back to .htaccess, fix wording
[ticket/11215] Update comment in .htaccess
[ticket/11215] Uncomment rewrite rules in .htaccess
[ticket/11215] Make controller helper url() method use correct format
[ticket/11215] Add commented-out URL rewrite capability to .htaccess
[ticket/11821] Fix comma usage next to "You are receiving this notification".
[ticket/11769] Allow using 0 as poster name
[ticket/11769] Allow '0' as username
[ticket/11215] Use new URL structure for controllers
[ticket/11215] Everything appears to be working...
...
Conflicts:
phpBB/includes/functions_privmsgs.php
Diffstat (limited to 'phpBB/includes/lock')
| -rw-r--r-- | phpBB/includes/lock/db.php | 138 | ||||
| -rw-r--r-- | phpBB/includes/lock/flock.php | 133 |
2 files changed, 0 insertions, 271 deletions
diff --git a/phpBB/includes/lock/db.php b/phpBB/includes/lock/db.php deleted file mode 100644 index 6e94dd5a85..0000000000 --- a/phpBB/includes/lock/db.php +++ /dev/null @@ -1,138 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2010 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -/** -* Database locking class -* @package phpBB3 -*/ -class phpbb_lock_db -{ - /** - * Name of the config variable this lock uses - * @var string - */ - private $config_name; - - /** - * Unique identifier for this lock. - * - * @var string - */ - private $unique_id; - - /** - * Stores the state of this lock - * @var bool - */ - private $locked; - - /** - * The phpBB configuration - * @var phpbb_config - */ - private $config; - - /** - * A database connection - * @var dbal - */ - private $db; - - /** - * Creates a named released instance of the lock. - * - * You have to call acquire() to actually create the lock. - * - * @param string $config_name A config variable to be used for locking - * @param array $config The phpBB configuration - * @param dbal $db A database connection - */ - public function __construct($config_name, phpbb_config $config, dbal $db) - { - $this->config_name = $config_name; - $this->config = $config; - $this->db = $db; - } - - /** - * Tries to acquire the lock by updating - * the 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 acquire() - { - if ($this->locked) - { - return false; - } - - if (!isset($this->config[$this->config_name])) - { - $this->config->set($this->config_name, '0', false); - } - $lock_value = $this->config[$this->config_name]; - - // make sure lock cannot be acquired by multiple processes - if ($lock_value) - { - // if the other process is running more than an hour already we have to assume it - // aborted without cleaning the lock - $time = explode(' ', $lock_value); - $time = $time[0]; - - if ($time + 3600 >= time()) - { - return false; - } - } - - $this->unique_id = time() . ' ' . unique_id(); - - // try to update the config value, if it was already modified by another - // process we failed to acquire the lock. - $this->locked = $this->config->set_atomic($this->config_name, $lock_value, $this->unique_id, false); - - return $this->locked; - } - - /** - * Releases the lock. - * - * The lock must have been previously obtained, that is, acquire() call - * was issued and returned true. - * - * Note: Attempting to release a lock that is already released, - * that is, calling release() multiple times, is harmless. - * - * @return null - */ - public function release() - { - if ($this->locked) - { - $this->config->set_atomic($this->config_name, $this->unique_id, '0', false); - $this->locked = false; - } - } -} diff --git a/phpBB/includes/lock/flock.php b/phpBB/includes/lock/flock.php deleted file mode 100644 index 97bc7dd2b9..0000000000 --- a/phpBB/includes/lock/flock.php +++ /dev/null @@ -1,133 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @copyright (c) 2012 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -/** -* File locking class -* @package phpBB3 -*/ -class phpbb_lock_flock -{ - /** - * Path to the file to which access is controlled - * - * @var string - */ - private $path; - - /** - * File pointer for the lock file - * @var string - */ - private $lock_fp; - - /** - * Constructor. - * - * You have to call acquire() to actually acquire the lock. - * - * @param string $path Path to the file to which access is controlled - */ - public function __construct($path) - { - $this->path = $path; - $this->lock_fp = null; - } - - /** - * Tries to acquire the lock. - * - * If the lock is already held by another process, this call will block - * until the other process releases the lock. If a lock is acquired and - * is not released before script finishes but the process continues to - * live (apache/fastcgi) then subsequent processes trying to acquire - * the same lock will be blocked forever. - * - * If the lock is already held by the same process via another instance - * of this class, this call will block forever. - * - * If flock function is disabled in php or fails to work, lock - * acquisition will fail and false will be returned. - * - * @return bool true if lock was acquired - * false otherwise - */ - public function acquire() - { - if ($this->lock_fp) - { - return false; - } - - // For systems that can't have two processes opening - // one file for writing simultaneously - if (file_exists($this->path . '.lock')) - { - $mode = 'rb'; - } - else - { - $mode = 'wb'; - } - - $this->lock_fp = @fopen($this->path . '.lock', $mode); - - if ($mode == 'wb') - { - if (!$this->lock_fp) - { - // Two processes may attempt to create lock file at the same time. - // Have the losing process try opening the lock file again for reading - // on the assumption that the winning process created it - $mode = 'rb'; - $this->lock_fp = @fopen($this->path . '.lock', $mode); - } - else - { - // Only need to set mode when the lock file is written - @chmod($this->path . '.lock', 0666); - } - } - - if ($this->lock_fp) - { - @flock($this->lock_fp, LOCK_EX); - } - - return (bool) $this->lock_fp; - } - - /** - * Releases the lock. - * - * The lock must have been previously obtained, that is, acquire() call - * was issued and returned true. - * - * Note: Attempting to release a lock that is already released, - * that is, calling release() multiple times, is harmless. - * - * @return null - */ - public function release() - { - if ($this->lock_fp) - { - @flock($this->lock_fp, LOCK_UN); - fclose($this->lock_fp); - $this->lock_fp = null; - } - } -} |
