1
0
mirror of https://github.com/danog/amp.git synced 2024-11-30 04:29:08 +01:00

Move nowUpdateNeeded setting to getTimeout()

Essentially the same fix as @bwoebi committed, just placed at the source of the problem.
This commit is contained in:
Aaron Piotrowski 2019-01-21 10:27:49 -06:00
parent c3afc5e977
commit b6fc1e12d4
No known key found for this signature in database
GPG Key ID: ADD1EF783EDE9EEB

View File

@ -161,20 +161,15 @@ class NativeDriver extends Driver
* @param resource[] $write * @param resource[] $write
* @param int $timeout * @param int $timeout
*/ */
private function selectStreams(array $read, array $write, $timeout) private function selectStreams(array $read, array $write, int $timeout)
{ {
$timeout /= self::MILLISEC_PER_SEC; $timeout /= self::MILLISEC_PER_SEC;
if (!empty($read) || !empty($write)) { // Use stream_select() if there are any streams in the loop. if (!empty($read) || !empty($write)) { // Use stream_select() if there are any streams in the loop.
if ($timeout == 0) { if ($timeout >= 0) {
$seconds = 0;
$microseconds = 0;
} elseif ($timeout > 0) {
$this->nowUpdateNeeded = true;
$seconds = (int) $timeout; $seconds = (int) $timeout;
$microseconds = (int) (($timeout - $seconds) * self::MICROSEC_PER_SEC); $microseconds = (int) (($timeout - $seconds) * self::MICROSEC_PER_SEC);
} else { } else {
$this->nowUpdateNeeded = true;
$seconds = null; $seconds = null;
$microseconds = null; $microseconds = null;
} }
@ -263,14 +258,13 @@ class NativeDriver extends Driver
if ($timeout > 0) { // Otherwise sleep with usleep() if $timeout > 0. if ($timeout > 0) { // Otherwise sleep with usleep() if $timeout > 0.
\usleep($timeout * self::MICROSEC_PER_SEC); \usleep($timeout * self::MICROSEC_PER_SEC);
$this->nowUpdateNeeded = true;
} }
} }
/** /**
* @return int Milliseconds until next timer expires or -1 if there are no pending times. * @return int Milliseconds until next timer expires or -1 if there are no pending times.
*/ */
private function getTimeout() private function getTimeout(): int
{ {
while (!$this->timerQueue->isEmpty()) { while (!$this->timerQueue->isEmpty()) {
list($watcher, $expiration) = $this->timerQueue->top(); list($watcher, $expiration) = $this->timerQueue->top();
@ -288,6 +282,8 @@ class NativeDriver extends Driver
return 0; return 0;
} }
$this->nowUpdateNeeded = true; // Loop will block, so trigger now update after blocking.
return $expiration; return $expiration;
} }