[DOC-CVS] [doc-en] master: document potential Windows deadlock (#4000)

[email protected] (divinity76 via GitHub)
Newsgroups php.doc.cvs
Message-ID <[email protected]>
Author: divinity76 (divinity76)
Committer: GitHub (web-flow)
Pusher: lacatoire
Date: 2026-08-24T15:38:08+02:00

Commit: https://github.com/php/doc-en/commit/f3112c43e303fcd63c0df89798b45bfef9d49e15
Raw diff: https://github.com/php/doc-en/commit/f3112c43e303fcd63c0df89798b45bfef9d49e15.diff

document potential Windows deadlock (#4000)

* document potential Windows deadlock

on Windows php's require() and "php file.php" reacts very differently to the LOCK_EX situation, require() will fail immediately (like a LOCK_NB) while cli "php file.php" will wait/hang until ready. Make that clear in the documentation.

* Docbook nits

* filesystem: fix flock.xml deadlock example structure

---------

Co-authored-by: Louis-Arnaud <[email protected]>

Changed paths:
  M  reference/filesystem/functions/flock.xml


Diff:

diff --git a/reference/filesystem/functions/flock.xml b/reference/filesystem/functions/flock.xml
index c157e6890ed2..2579c73bdcc5 100644
--- a/reference/filesystem/functions/flock.xml
+++ b/reference/filesystem/functions/flock.xml
@@ -189,12 +189,32 @@ fclose($fp);
     <literal>FAT</literal> and its derivates and will therefore always
     return &false; under these environments.
    </para>
+   <para>
+    On Windows, if PHP tries to execute a <constant>LOCK_EX</constant>'ed PHP source
+    code file, it will hang until the file is unlocked. The following example will
+    cause a deadlock:
+    <informalexample>
+     <programlisting role="php">
+<![CDATA[
+<?php
+if ($argv[1] ?? null === 'child') { die(); }
+$fp = fopen(__FILE__, "rb");
+flock($fp, LOCK_EX);
+shell_exec("php " . escapeshellarg(__FILE__) . " child");
+?>
+]]>
+     </programlisting>
+    </informalexample>
+   </para>
   </warning>
   <note>
    <para>
     On Windows, if the locking process opens the file a second time, it cannot
     access the file through this second handle until it unlocks the file.
    </para>
+   <simpara>
+    On Windows, if you try to require a LOCK_EX'ed file, it will fail with ErrorException: require(): Read of X bytes failed with errno=13 Permission denied
+   </simpara>
   </note>
  </refsect1>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.