diff --git a/src/Boot/src/Memory.php b/src/Boot/src/Memory.php index d2f42ece6..5a4f179fb 100644 --- a/src/Boot/src/Memory.php +++ b/src/Boot/src/Memory.php @@ -24,9 +24,9 @@ public function __construct( } /** - * @param string $filename Cache filename. + * @param non-empty-string|null $filename Cache filename. */ - public function loadData(string $section, string &$filename = null): mixed + public function loadData(string $section, ?string &$filename = null): mixed { $filename = $this->getFilename($section); @@ -34,17 +34,27 @@ public function loadData(string $section, string &$filename = null): mixed return null; } + $fp = false; + $lock = false; + try { $fp = \fopen($filename, 'r'); - if (!\flock($fp, \LOCK_SH | \LOCK_NB)) { + if ($fp === false) { + return null; + } + + $lock = \flock($fp, \LOCK_SH | \LOCK_NB); + + if ($lock === false) { return null; } - $data = include($filename); - \flock($fp, \LOCK_UN); - \fclose($fp); - return $data; + + return include($filename); } catch (\Throwable) { return null; + } finally { + $lock === false or \flock($fp, \LOCK_UN); + $fp === false or \fclose($fp); } }