mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-19 07:12:26 +02:00
N°9319 increase php min. version to 8.2 (#887)
* Update minimum PHP version to 8.2 * Fix previous wrong resolution of merge conflict
This commit is contained in:
31
lib/symfony/cache/LockRegistry.php
vendored
31
lib/symfony/cache/LockRegistry.php
vendored
@@ -65,12 +65,14 @@ final class LockRegistry
|
||||
/**
|
||||
* Defines a set of existing files that will be used as keys to acquire locks.
|
||||
*
|
||||
* @return array The previously defined set of files
|
||||
* @param list<string> $files A list of existing files
|
||||
*
|
||||
* @return list<string> The previously defined set of files
|
||||
*/
|
||||
public static function setFiles(array $files): array
|
||||
{
|
||||
$previousFiles = self::$files;
|
||||
self::$files = $files;
|
||||
self::$files = array_values($files);
|
||||
|
||||
foreach (self::$openedFiles as $file) {
|
||||
if ($file) {
|
||||
@@ -97,7 +99,7 @@ final class LockRegistry
|
||||
}
|
||||
|
||||
self::$signalingException ??= unserialize("O:9:\"Exception\":1:{s:16:\"\0Exception\0trace\";a:0:{}}");
|
||||
self::$signalingCallback ??= fn () => throw self::$signalingException;
|
||||
self::$signalingCallback ??= static fn () => throw self::$signalingException;
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
@@ -123,14 +125,33 @@ final class LockRegistry
|
||||
}
|
||||
// if we failed the race, retry locking in blocking mode to wait for the winner
|
||||
$logger?->info('Item "{key}" is locked, waiting for it to be released', ['key' => $item->getKey()]);
|
||||
flock($lock, \LOCK_SH);
|
||||
|
||||
$deadline = microtime(true) + 30.0;
|
||||
$acquired = false;
|
||||
do {
|
||||
if ($acquired = flock($lock, \LOCK_SH | \LOCK_NB)) {
|
||||
break;
|
||||
}
|
||||
usleep(100_000);
|
||||
} while (microtime(true) < $deadline);
|
||||
|
||||
if (!$acquired) {
|
||||
$logger?->warning('Lock on item "{key}" timed out, evicting slot', ['key' => $item->getKey()]);
|
||||
unset(self::$files[$key]);
|
||||
self::setFiles(self::$files);
|
||||
$lock = null;
|
||||
|
||||
return self::compute($callback, $item, $save, $pool, $setMetadata, $logger, $beta);
|
||||
}
|
||||
|
||||
if (\INF === $beta) {
|
||||
$logger?->info('Force-recomputing item "{key}"', ['key' => $item->getKey()]);
|
||||
continue;
|
||||
}
|
||||
} finally {
|
||||
flock($lock, \LOCK_UN);
|
||||
if ($lock) {
|
||||
flock($lock, \LOCK_UN);
|
||||
}
|
||||
unset(self::$lockedFiles[$key]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user