summaryrefslogtreecommitdiff
path: root/vendor/symfony/cache/Traits/ContractsTrait.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/symfony/cache/Traits/ContractsTrait.php')
-rw-r--r--vendor/symfony/cache/Traits/ContractsTrait.php19
1 files changed, 11 insertions, 8 deletions
diff --git a/vendor/symfony/cache/Traits/ContractsTrait.php b/vendor/symfony/cache/Traits/ContractsTrait.php
index bd7be08dd5..d9514d3965 100644
--- a/vendor/symfony/cache/Traits/ContractsTrait.php
+++ b/vendor/symfony/cache/Traits/ContractsTrait.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Cache\Traits;
+use Psr\Log\LoggerInterface;
use Symfony\Component\Cache\Adapter\AdapterInterface;
use Symfony\Component\Cache\CacheItem;
use Symfony\Component\Cache\Exception\InvalidArgumentException;
@@ -31,6 +32,7 @@ trait ContractsTrait
}
private $callbackWrapper = [LockRegistry::class, 'compute'];
+ private $computing = [];
/**
* Wraps the callback passed to ->get() in a callable.
@@ -40,7 +42,7 @@ trait ContractsTrait
public function setCallbackWrapper(?callable $callbackWrapper): callable
{
$previousWrapper = $this->callbackWrapper;
- $this->callbackWrapper = $callbackWrapper ?? function (callable $callback, ItemInterface $item, bool &$save, CacheInterface $pool, \Closure $setMetadata) {
+ $this->callbackWrapper = $callbackWrapper ?? function (callable $callback, ItemInterface $item, bool &$save, CacheInterface $pool, \Closure $setMetadata, ?LoggerInterface $logger) {
return $callback($item, $save);
};
@@ -68,27 +70,28 @@ trait ContractsTrait
CacheItem::class
);
- return $this->contractsGet($pool, $key, function (CacheItem $item, bool &$save) use ($pool, $callback, $setMetadata, &$metadata) {
+ return $this->contractsGet($pool, $key, function (CacheItem $item, bool &$save) use ($pool, $callback, $setMetadata, &$metadata, $key) {
// don't wrap nor save recursive calls
- if (null === $callbackWrapper = $this->callbackWrapper) {
+ if (isset($this->computing[$key])) {
$value = $callback($item, $save);
$save = false;
return $value;
}
- $this->callbackWrapper = null;
+
+ $this->computing[$key] = $key;
$startTime = microtime(true);
try {
- $value = $callbackWrapper($callback, $item, $save, $pool, function (CacheItem $item) use ($setMetadata, $startTime, &$metadata) {
+ $value = ($this->callbackWrapper)($callback, $item, $save, $pool, function (CacheItem $item) use ($setMetadata, $startTime, &$metadata) {
$setMetadata($item, $startTime, $metadata);
- });
+ }, $this->logger ?? null);
$setMetadata($item, $startTime, $metadata);
return $value;
} finally {
- $this->callbackWrapper = $callbackWrapper;
+ unset($this->computing[$key]);
}
- }, $beta, $metadata);
+ }, $beta, $metadata, $this->logger ?? null);
}
}