mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
timers: fix handling of large timeouts
Don't use the double-negate trick to coalesce the timeout argument into a number, it produces the wrong result for very large timeouts. Example: setTimeout(cb, 1e10); // doesn't work, ~~1e10 == 1410065408
This commit is contained in:
parent
9126dd2d90
commit
0c47219a72
@ -170,8 +170,9 @@ exports.active = function(item) {
|
||||
exports.setTimeout = function(callback, after) {
|
||||
var timer;
|
||||
|
||||
after = ~~after;
|
||||
if (after < 1 || after > TIMEOUT_MAX) {
|
||||
after *= 1; // coalesce to number or NaN
|
||||
|
||||
if (!(after >= 1 && after <= TIMEOUT_MAX)) {
|
||||
after = 1; // schedule on next tick, follows browser behaviour
|
||||
}
|
||||
|
||||
@ -222,8 +223,9 @@ exports.setInterval = function(callback, repeat) {
|
||||
|
||||
if (process.domain) timer.domain = process.domain;
|
||||
|
||||
repeat = ~~repeat;
|
||||
if (repeat < 1 || repeat > TIMEOUT_MAX) {
|
||||
repeat *= 1; // coalesce to number or NaN
|
||||
|
||||
if (!(repeat >= 1 && repeat <= TIMEOUT_MAX)) {
|
||||
repeat = 1; // schedule on next tick, follows browser behaviour
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,8 @@ var inputs = [
|
||||
1,
|
||||
1.0,
|
||||
10,
|
||||
2147483648 // browser behaviour: timeouts > 2^31-1 run on next tick
|
||||
2147483648, // browser behaviour: timeouts > 2^31-1 run on next tick
|
||||
12345678901234 // ditto
|
||||
];
|
||||
|
||||
var timeouts = [];
|
||||
|
Loading…
Reference in New Issue
Block a user