Skip to content

Commit 37c4c06

Browse files
committed
Deprecate the LockHandler utility
1 parent 5828b2f commit 37c4c06

File tree

2 files changed

+2
-96
lines changed

2 files changed

+2
-96
lines changed

components/filesystem.rst

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -314,14 +314,5 @@ Whenever something wrong happens, an exception implementing
314314
An :class:`Symfony\\Component\\Filesystem\\Exception\\IOException` is
315315
thrown if directory creation fails.
316316

317-
Learn More
318-
----------
319-
320-
.. toctree::
321-
:maxdepth: 1
322-
:glob:
323-
324-
filesystem/*
325-
326317
.. _`Packagist`: https://packagist.org/packages/symfony/filesystem
327318
.. _`umask`: https://en.wikipedia.org/wiki/Umask
Lines changed: 2 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,7 @@
11
LockHandler
22
===========
33

4-
What is a Lock?
5-
---------------
6-
7-
File locking is a mechanism that restricts access to a computer file by allowing
8-
only one user or process access at any specific time. This mechanism was
9-
introduced a few decades ago for mainframes, but continues being useful for
10-
modern applications.
11-
12-
Symfony provides a LockHelper to help you use locks in your project.
13-
14-
Usage
15-
-----
16-
174
.. caution::
185

19-
The lock handler only works if you're using just one server. If you have
20-
several hosts, you must not use this helper.
21-
22-
A lock can be used, for example, to allow only one instance of a command to run.
23-
24-
.. code-block:: php
25-
26-
use Symfony\Component\Filesystem\LockHandler;
27-
28-
$lockHandler = new LockHandler('hello.lock');
29-
if (!$lockHandler->lock()) {
30-
// the resource "hello" is already locked by another process
31-
32-
return 0;
33-
}
34-
35-
The first argument of the constructor is a string that it will use as part of
36-
the name of the file used to create the lock on the local filesystem. A best
37-
practice for Symfony commands is to use the command name, such as ``acme:my-command``.
38-
``LockHandler`` sanitizes the contents of the string before creating
39-
the file, so you can pass any value for this argument.
40-
41-
.. tip::
42-
43-
The ``.lock`` extension is optional, but it's a common practice to include
44-
it. This will make it easier to find lock files on the filesystem. Moreover,
45-
to avoid name collisions, ``LockHandler`` also appends a hash to the name of
46-
the lock file.
47-
48-
By default, the lock will be created in the system's temporary directory, but
49-
you can optionally select the directory where locks are created by passing it as
50-
the second argument of the constructor.
51-
52-
.. tip::
53-
54-
Another way to configure the directory where the locks are created is to
55-
define a special environment variable, because PHP will use that value to
56-
override the default temporary directory. On Unix-based systems, define the
57-
``TMPDIR`` variable. On Windows systems, define any of these variables:
58-
``TMP``, ``TEMP`` or ``USERPROFILE`` (they are checked in this order). This
59-
technique is useful for example when deploying a third-party Symfony
60-
application whose code can't be modified.
61-
62-
The :method:`Symfony\\Component\\Filesystem\\LockHandler::lock` method tries to
63-
acquire the lock. If the lock is acquired, the method returns ``true``,
64-
``false`` otherwise. If the ``lock()`` method is called several times on the same
65-
instance it will always return ``true`` if the lock was acquired on the first
66-
call.
67-
68-
You can pass an optional blocking argument as the first argument to the
69-
``lock()`` method, which defaults to ``false``. If this is set to ``true``, your
70-
PHP code will wait indefinitely until the lock is released by another process.
71-
72-
.. caution::
73-
74-
Be aware of the fact that the resource lock is automatically released as soon
75-
as PHP applies the garbage-collection process to the ``LockHandler`` object.
76-
This means that if you refactor the first example shown in this article as
77-
follows::
78-
79-
use Symfony\Component\Filesystem\LockHandler;
80-
81-
if (!(new LockHandler('hello.lock'))->lock()) {
82-
// the resource "hello" is already locked by another process
83-
84-
return 0;
85-
}
86-
87-
Now the code won't work as expected because PHP's garbage collection mechanism
88-
removes the reference to the ``LockHandler`` object and thus, the lock is released
89-
just after it's been created.
90-
91-
Another alternative way to release the lock explicitly when needed is to use the
92-
:method:`Symfony\\Component\\Filesystem\\LockHandler::release` method.
6+
The ``LockHandler`` utility is deprecated since Symfony 3.4. Use the new
7+
Symfony Lock component instead.

0 commit comments

Comments
 (0)