From dc4380f9846beeafd5941bfcd9a2a5997f1637f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rokas=20Mikalk=C4=97nas?= Date: Mon, 8 Nov 2021 11:38:24 +0200 Subject: [PATCH] [HttpClient] Curl http client has to reinit curl multi handle on reset --- src/Symfony/Component/HttpClient/CurlHttpClient.php | 3 +++ .../HttpClient/Tests/CurlHttpClientTest.php | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/Symfony/Component/HttpClient/CurlHttpClient.php b/src/Symfony/Component/HttpClient/CurlHttpClient.php index eb09f48bb69dc..af480d45bf518 100644 --- a/src/Symfony/Component/HttpClient/CurlHttpClient.php +++ b/src/Symfony/Component/HttpClient/CurlHttpClient.php @@ -360,6 +360,9 @@ public function reset() curl_setopt($ch, \CURLOPT_VERBOSE, false); } } + + curl_multi_close($this->multi->handle); + $this->multi->handle = curl_multi_init(); } /** diff --git a/src/Symfony/Component/HttpClient/Tests/CurlHttpClientTest.php b/src/Symfony/Component/HttpClient/Tests/CurlHttpClientTest.php index 5cbdcb7f3e15d..34e4b38e722df 100644 --- a/src/Symfony/Component/HttpClient/Tests/CurlHttpClientTest.php +++ b/src/Symfony/Component/HttpClient/Tests/CurlHttpClientTest.php @@ -136,6 +136,18 @@ public function testTimeoutIsNotAFatalError() parent::testTimeoutIsNotAFatalError(); } + public function testHandleIsReinitOnReset() + { + $httpClient = $this->getHttpClient(__FUNCTION__); + + $r = new \ReflectionProperty($httpClient, 'multi'); + $r->setAccessible(true); + $clientState = $r->getValue($httpClient); + $initialHandleId = (int) $clientState->handle; + $httpClient->reset(); + self::assertNotSame($initialHandleId, (int) $clientState->handle); + } + private function getVulcainClient(): CurlHttpClient { if (\PHP_VERSION_ID >= 70300 && \PHP_VERSION_ID < 70304) {