Skip to content

Commit de56765

Browse files
Merge branch '6.4' into 7.2
* 6.4: [WebProfilerBundle] Fix tests [Cache] Tests for Redis Replication with cache [BrowserKit] Fix submitting forms with empty file fields [WebProfilerBundle] Fix interception for non conventional redirects [DependencyInjection] Do not preload functions [DependencyInjection] Fix cloned lazy services not sharing their dependencies when dumped with PhpDumper [HttpClient] Fix activity tracking leading to negative timeout errors [Security] Return null instead of empty username to fix deprecation notice [DependencyInjection] Fix env default processor with scalar node
2 parents bffd80d + 687e032 commit de56765

File tree

5 files changed

+33
-31
lines changed

5 files changed

+33
-31
lines changed

Response/AmpResponseV4.php

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -181,19 +181,17 @@ private static function schedule(self $response, array &$runningResponses): void
181181
/**
182182
* @param AmpClientStateV4 $multi
183183
*/
184-
private static function perform(ClientState $multi, ?array &$responses = null): void
184+
private static function perform(ClientState $multi, ?array $responses = null): void
185185
{
186-
if ($responses) {
187-
foreach ($responses as $response) {
188-
try {
189-
if ($response->info['start_time']) {
190-
$response->info['total_time'] = microtime(true) - $response->info['start_time'];
191-
($response->onProgress)();
192-
}
193-
} catch (\Throwable $e) {
194-
$multi->handlesActivity[$response->id][] = null;
195-
$multi->handlesActivity[$response->id][] = $e;
186+
foreach ($responses ?? [] as $response) {
187+
try {
188+
if ($response->info['start_time']) {
189+
$response->info['total_time'] = microtime(true) - $response->info['start_time'];
190+
($response->onProgress)();
196191
}
192+
} catch (\Throwable $e) {
193+
$multi->handlesActivity[$response->id][] = null;
194+
$multi->handlesActivity[$response->id][] = $e;
197195
}
198196
}
199197
}

Response/CurlResponse.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,11 @@ private static function schedule(self $response, array &$runningResponses): void
269269
/**
270270
* @param CurlClientState $multi
271271
*/
272-
private static function perform(ClientState $multi, ?array &$responses = null): void
272+
private static function perform(ClientState $multi, ?array $responses = null): void
273273
{
274274
if ($multi->performing) {
275275
if ($responses) {
276-
$response = current($responses);
276+
$response = $responses[array_key_first($responses)];
277277
$multi->handlesActivity[(int) $response->handle][] = null;
278278
$multi->handlesActivity[(int) $response->handle][] = new TransportException(\sprintf('Userland callback cannot use the client nor the response while processing "%s".', curl_getinfo($response->handle, \CURLINFO_EFFECTIVE_URL)));
279279
}

Response/MockResponse.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ protected static function schedule(self $response, array &$runningResponses): vo
176176
$runningResponses[0][1][$response->id] = $response;
177177
}
178178

179-
protected static function perform(ClientState $multi, array &$responses): void
179+
protected static function perform(ClientState $multi, array $responses): void
180180
{
181181
foreach ($responses as $response) {
182182
$id = $response->id;

Response/NativeResponse.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ private static function schedule(self $response, array &$runningResponses): void
229229
/**
230230
* @param NativeClientState $multi
231231
*/
232-
private static function perform(ClientState $multi, ?array &$responses = null): void
232+
private static function perform(ClientState $multi, ?array $responses = null): void
233233
{
234234
foreach ($multi->openHandles as $i => [$pauseExpiry, $h, $buffer, $onProgress]) {
235235
if ($pauseExpiry) {

Response/TransportResponseTrait.php

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ abstract protected static function schedule(self $response, array &$runningRespo
9292
/**
9393
* Performs all pending non-blocking operations.
9494
*/
95-
abstract protected static function perform(ClientState $multi, array &$responses): void;
95+
abstract protected static function perform(ClientState $multi, array $responses): void;
9696

9797
/**
9898
* Waits for network activity.
@@ -150,10 +150,15 @@ public static function stream(iterable $responses, ?float $timeout = null): \Gen
150150
$lastActivity = hrtime(true) / 1E9;
151151
$elapsedTimeout = 0;
152152

153-
if ($fromLastTimeout = 0.0 === $timeout && '-0' === (string) $timeout) {
154-
$timeout = null;
155-
} elseif ($fromLastTimeout = 0 > $timeout) {
156-
$timeout = -$timeout;
153+
if ((0.0 === $timeout && '-0' === (string) $timeout) || 0 > $timeout) {
154+
$timeout = $timeout ? -$timeout : null;
155+
156+
/** @var ClientState $multi */
157+
foreach ($runningResponses as [$multi]) {
158+
if (null !== $multi->lastTimeout) {
159+
$elapsedTimeout = max($elapsedTimeout, $lastActivity - $multi->lastTimeout);
160+
}
161+
}
157162
}
158163

159164
while (true) {
@@ -162,35 +167,33 @@ public static function stream(iterable $responses, ?float $timeout = null): \Gen
162167
$timeoutMin = $timeout ?? \INF;
163168

164169
/** @var ClientState $multi */
165-
foreach ($runningResponses as $i => [$multi]) {
166-
$responses = &$runningResponses[$i][1];
170+
foreach ($runningResponses as $i => [$multi, &$responses]) {
167171
self::perform($multi, $responses);
168172

169173
foreach ($responses as $j => $response) {
170174
$timeoutMax = $timeout ?? max($timeoutMax, $response->timeout);
171175
$timeoutMin = min($timeoutMin, $response->timeout, 1);
172176
$chunk = false;
173177

174-
if ($fromLastTimeout && null !== $multi->lastTimeout) {
175-
$elapsedTimeout = hrtime(true) / 1E9 - $multi->lastTimeout;
176-
}
177-
178178
if (isset($multi->handlesActivity[$j])) {
179179
$multi->lastTimeout = null;
180+
$elapsedTimeout = 0;
180181
} elseif (!isset($multi->openHandles[$j])) {
182+
$hasActivity = true;
181183
unset($responses[$j]);
182184
continue;
183185
} elseif ($elapsedTimeout >= $timeoutMax) {
184186
$multi->handlesActivity[$j] = [new ErrorChunk($response->offset, \sprintf('Idle timeout reached for "%s".', $response->getInfo('url')))];
185187
$multi->lastTimeout ??= $lastActivity;
188+
$elapsedTimeout = $timeoutMax;
186189
} else {
187190
continue;
188191
}
189192

190-
while ($multi->handlesActivity[$j] ?? false) {
191-
$hasActivity = true;
192-
$elapsedTimeout = 0;
193+
$lastActivity = null;
194+
$hasActivity = true;
193195

196+
while ($multi->handlesActivity[$j] ?? false) {
194197
if (\is_string($chunk = array_shift($multi->handlesActivity[$j]))) {
195198
if (null !== $response->inflate && false === $chunk = @inflate_add($response->inflate, $chunk)) {
196199
$multi->handlesActivity[$j] = [null, new TransportException(\sprintf('Error while processing content unencoding for "%s".', $response->getInfo('url')))];
@@ -227,7 +230,6 @@ public static function stream(iterable $responses, ?float $timeout = null): \Gen
227230
}
228231
} elseif ($chunk instanceof ErrorChunk) {
229232
unset($responses[$j]);
230-
$elapsedTimeout = $timeoutMax;
231233
} elseif ($chunk instanceof FirstChunk) {
232234
if ($response->logger) {
233235
$info = $response->getInfo();
@@ -278,10 +280,12 @@ public static function stream(iterable $responses, ?float $timeout = null): \Gen
278280
if ($chunk instanceof ErrorChunk && !$chunk->didThrow()) {
279281
// Ensure transport exceptions are always thrown
280282
$chunk->getContent();
283+
throw new \LogicException('A transport exception should have been thrown.');
281284
}
282285
}
283286

284287
if (!$responses) {
288+
$hasActivity = true;
285289
unset($runningResponses[$i]);
286290
}
287291

@@ -295,7 +299,7 @@ public static function stream(iterable $responses, ?float $timeout = null): \Gen
295299
}
296300

297301
if ($hasActivity) {
298-
$lastActivity = hrtime(true) / 1E9;
302+
$lastActivity ??= hrtime(true) / 1E9;
299303
continue;
300304
}
301305

0 commit comments

Comments
 (0)