Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit de56765

Browse filesBrowse 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
Copy full SHA for de56765

File tree

Expand file treeCollapse file tree

5 files changed

+33
-31
lines changed
Filter options
Expand file treeCollapse file tree

5 files changed

+33
-31
lines changed

‎Response/AmpResponseV4.php

Copy file name to clipboardExpand all lines: Response/AmpResponseV4.php
+9-11Lines 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

Copy file name to clipboardExpand all lines: Response/CurlResponse.php
+2-2Lines 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

Copy file name to clipboardExpand all lines: Response/MockResponse.php
+1-1Lines 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

Copy file name to clipboardExpand all lines: Response/NativeResponse.php
+1-1Lines 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

Copy file name to clipboardExpand all lines: Response/TransportResponseTrait.php
+20-16Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.