From a580688ee53657c1fd05974af3dc6a188dfedf01 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 13 Oct 2020 10:06:18 +0200 Subject: [PATCH] [HttpClient] skip executing the multi handle when it's freed already --- src/Symfony/Component/HttpClient/CurlHttpClient.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Component/HttpClient/CurlHttpClient.php b/src/Symfony/Component/HttpClient/CurlHttpClient.php index 247d63e286..bbcaf69e3b 100644 --- a/src/Symfony/Component/HttpClient/CurlHttpClient.php +++ b/src/Symfony/Component/HttpClient/CurlHttpClient.php @@ -320,18 +320,16 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface, */ public function stream($responses, float $timeout = null): ResponseStreamInterface { - if (!\is_resource($this->multi->handle) && !$this->multi->handle instanceof \CurlMultiHandle) { - $responses = []; - } - if ($responses instanceof CurlResponse) { $responses = [$responses]; } elseif (!is_iterable($responses)) { throw new \TypeError(sprintf('"%s()" expects parameter 1 to be an iterable of CurlResponse objects, "%s" given.', __METHOD__, \is_object($responses) ? \get_class($responses) : \gettype($responses))); } - $active = 0; - while (\CURLM_CALL_MULTI_PERFORM === curl_multi_exec($this->multi->handle, $active)); + if (\is_resource($this->multi->handle) || $this->multi->handle instanceof \CurlMultiHandle) { + $active = 0; + while (\CURLM_CALL_MULTI_PERFORM === curl_multi_exec($this->multi->handle, $active)); + } return new ResponseStream(CurlResponse::stream($responses, $timeout)); }