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.
|
||||
// This happens if there are more timers scheduled for later in the list.
|
||||
if (diff < msecs) {
|
||||
list.expiry = timer._idleStart + msecs;
|
||||
list.expiry = Math.max(timer._idleStart + msecs, now + 1);
|
||||
list.id = timerListId++;
|
||||
queue.percolateDown(1);
|
||||
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