timers: fix setTimeout expiration logic
Fix the timer logic to be the same as v10.30.0. Fixes: https://github.com/nodejs/node/issues/24203 PR-URL: https://github.com/nodejs/node/pull/24214 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
parent
eb6741b15e
commit
e9de435498
@ -283,7 +283,7 @@ function listOnTimeout(list, now) {
|
|||||||
// Check if this loop iteration is too early for the next timer.
|
// Check if this loop iteration is too early for the next timer.
|
||||||
// This happens if there are more timers scheduled for later in the list.
|
// This happens if there are more timers scheduled for later in the list.
|
||||||
if (diff < msecs) {
|
if (diff < msecs) {
|
||||||
list.expiry = timer._idleStart + msecs;
|
list.expiry = Math.max(timer._idleStart + msecs, now + 1);
|
||||||
list.id = timerListId++;
|
list.id = timerListId++;
|
||||||
queue.percolateDown(1);
|
queue.percolateDown(1);
|
||||||
debug('%d list wait because diff is %d', msecs, diff);
|
debug('%d list wait because diff is %d', msecs, diff);
|
||||||
|
15
test/parallel/test-timers-timeout-with-non-integer.js
Normal file
15
test/parallel/test-timers-timeout-with-non-integer.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
'use strict';
|
||||||
|
const common = require('../common');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This test is for https://github.com/nodejs/node/issues/24203
|
||||||
|
*/
|
||||||
|
let count = 50;
|
||||||
|
const time = 1.00000000000001;
|
||||||
|
const exec = common.mustCall(() => {
|
||||||
|
if (--count === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setTimeout(exec, time);
|
||||||
|
}, count);
|
||||||
|
exec();
|
Loading…
x
Reference in New Issue
Block a user