Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4111097
ScopedLock.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
ScopedLock.php
View Options
<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
/**
* Self-releasing locks.
*
* Helper for consumers of LockManager, to create locks that automatically
* release when an object is destroyed or goes out of scope.
*
* @ingroup LockManager
* @since 1.19
*/
class
ScopedLock
{
/** @var LockManager */
protected
$manager
;
/** @var StatusValue */
protected
$status
;
/** @var array Map of lock types to resource paths */
protected
$pathsByType
;
/**
* @param LockManager $manager
* @param array $pathsByType Map of lock types to path lists
* @param StatusValue $status
*/
protected
function
__construct
(
LockManager
$manager
,
array
$pathsByType
,
StatusValue
$status
)
{
$this
->
manager
=
$manager
;
$this
->
pathsByType
=
$pathsByType
;
$this
->
status
=
$status
;
}
/**
* Get a ScopedLock object representing a lock on resource paths.
* Any locks are released once this object goes out of scope.
* The StatusValue object is updated with any errors or warnings.
*
* @param LockManager $manager
* @param array $paths List of storage paths or map of lock types to path lists
* @param int|string $type LockManager::LOCK_* constant or "mixed" and $paths
* can be a map of types to paths (since 1.22). Otherwise $type should be an
* integer and $paths should be a list of paths.
* @param StatusValue $status
* @param int $timeout Timeout in seconds (0 means non-blocking) (since 1.22)
* @return ScopedLock|null Returns null on failure
*/
public
static
function
factory
(
LockManager
$manager
,
array
$paths
,
$type
,
StatusValue
$status
,
$timeout
=
0
)
{
$pathsByType
=
is_int
(
$type
)
?
[
$type
=>
$paths
]
:
$paths
;
$lockStatus
=
$manager
->
lockByType
(
$pathsByType
,
$timeout
);
$status
->
merge
(
$lockStatus
);
if
(
$lockStatus
->
isOK
()
)
{
return
new
self
(
$manager
,
$pathsByType
,
$status
);
}
return
null
;
}
/**
* Release a scoped lock and set any errors in the attached StatusValue object.
* This is useful for early release of locks before function scope is destroyed.
* This is the same as setting the lock object to null.
*
* @param ScopedLock|null &$lock
* @since 1.21
*/
public
static
function
release
(
?
ScopedLock
&
$lock
=
null
)
{
$lock
=
null
;
}
/**
* Release the locks when this goes out of scope
*/
public
function
__destruct
()
{
$wasOk
=
$this
->
status
->
isOK
();
$this
->
status
->
merge
(
$this
->
manager
->
unlockByType
(
$this
->
pathsByType
)
);
if
(
$wasOk
)
{
// Make sure StatusValue is OK, despite any unlockFiles() fatals
$this
->
status
->
setResult
(
true
,
$this
->
status
->
value
);
}
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 22:09 (1 d, 14 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
fd/85/0e5de72f56eec4e8a28ff4fad7ef
Default Alt Text
ScopedLock.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment