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

Warn if time is about to overflow on 32 bit

This commit is contained in:
Niklas Keller 2019-05-31 20:15:22 +02:00
parent 8b38da2f9c
commit 72a0db5cdc

View File

@ -60,19 +60,45 @@ function createTypeError(array $expected, $given): \TypeError
function getCurrentTime(): int
{
static $startTime;
static $nextWarning;
if (\PHP_INT_SIZE === 4) {
if ($startTime === null) {
$startTime = \PHP_VERSION_ID >= 70300 ? \hrtime(false)[0] : \time();
$nextWarning = \PHP_INT_MAX - 86400 * 7;
}
if (\PHP_VERSION_ID >= 70300) {
list($seconds, $nanoseconds) = \hrtime(false);
$seconds -= $startTime;
if ($seconds >= $nextWarning) {
$timeToOverflow = (\PHP_INT_MAX - $seconds * 1000) / 1000;
\trigger_error(
"getCurrentTime() will overflow in $timeToOverflow seconds, please restart the process before that. " .
"You're using a 32 bit version of PHP, so time will overflow about every 24 days. Regular restarts are required.",
\E_USER_WARNING
);
$nextWarning += 600; // every 10 minutes
}
return (int) ($seconds * 1000 + $nanoseconds / 1000000);
}
return ((\microtime(true) - $startTime) * 1000);
$seconds = \microtime(true) - $startTime;
if ($seconds >= $nextWarning) {
$timeToOverflow = (\PHP_INT_MAX - $seconds * 1000) / 1000;
\trigger_error(
"getCurrentTime() will overflow in $timeToOverflow seconds, please restart the process before that. " .
"You're using a 32 bit version of PHP, so time will overflow about every 24 days. Regular restarts are required.",
\E_USER_WARNING
);
$nextWarning += 600; // every 10 minutes
}
return $seconds * 1000;
}
if (\PHP_VERSION_ID >= 70300) {