diff --git a/src/Symfony/Component/HttpClient/Internal/CurlClientState.php b/src/Symfony/Component/HttpClient/Internal/CurlClientState.php index 7d51c15cac5a7..80473fee07021 100644 --- a/src/Symfony/Component/HttpClient/Internal/CurlClientState.php +++ b/src/Symfony/Component/HttpClient/Internal/CurlClientState.php @@ -36,6 +36,7 @@ final class CurlClientState extends ClientState public $execCounter = \PHP_INT_MIN; /** @var LoggerInterface|null */ public $logger; + public $performing = false; public static $curlVersion; diff --git a/src/Symfony/Component/HttpClient/Response/CurlResponse.php b/src/Symfony/Component/HttpClient/Response/CurlResponse.php index b03a49a946a85..7cfad581af4c4 100644 --- a/src/Symfony/Component/HttpClient/Response/CurlResponse.php +++ b/src/Symfony/Component/HttpClient/Response/CurlResponse.php @@ -32,7 +32,6 @@ final class CurlResponse implements ResponseInterface, StreamableInterface } use TransportResponseTrait; - private static $performing = false; private $multi; private $debugBuffer; @@ -179,7 +178,7 @@ public function __construct(CurlClientState $multi, $ch, array $options = null, unset($multi->pauseExpiries[$id], $multi->openHandles[$id], $multi->handlesActivity[$id]); curl_setopt($ch, \CURLOPT_PRIVATE, '_0'); - if (self::$performing) { + if ($multi->performing) { return; } @@ -237,13 +236,13 @@ public function getInfo(string $type = null) */ public function getContent(bool $throw = true): string { - $performing = self::$performing; - self::$performing = $performing || '_0' === curl_getinfo($this->handle, \CURLINFO_PRIVATE); + $performing = $this->multi->performing; + $this->multi->performing = $performing || '_0' === curl_getinfo($this->handle, \CURLINFO_PRIVATE); try { return $this->doGetContent($throw); } finally { - self::$performing = $performing; + $this->multi->performing = $performing; } } @@ -287,7 +286,7 @@ private static function schedule(self $response, array &$runningResponses): void */ private static function perform(ClientState $multi, array &$responses = null): void { - if (self::$performing) { + if ($multi->performing) { if ($responses) { $response = current($responses); $multi->handlesActivity[(int) $response->handle][] = null; @@ -298,7 +297,7 @@ private static function perform(ClientState $multi, array &$responses = null): v } try { - self::$performing = true; + $multi->performing = true; ++$multi->execCounter; $active = 0; while (\CURLM_CALL_MULTI_PERFORM === ($err = curl_multi_exec($multi->handle, $active))) { @@ -335,7 +334,7 @@ private static function perform(ClientState $multi, array &$responses = null): v $multi->handlesActivity[$id][] = \in_array($result, [\CURLE_OK, \CURLE_TOO_MANY_REDIRECTS], true) || '_0' === $waitFor || curl_getinfo($ch, \CURLINFO_SIZE_DOWNLOAD) === curl_getinfo($ch, \CURLINFO_CONTENT_LENGTH_DOWNLOAD) ? null : new TransportException(ucfirst(curl_error($ch) ?: curl_strerror($result)).sprintf(' for "%s".', curl_getinfo($ch, \CURLINFO_EFFECTIVE_URL))); } } finally { - self::$performing = false; + $multi->performing = false; } }