mirror of https://github.com/nodejs/node.git
timers: fix handling of cleared immediates
If current immediate has no callback, move on to the next one in the queue. Fixes: https://github.com/nodejs/node/issues/9756 PR-URL: https://github.com/nodejs/node/pull/9759 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>pull/9440/merge
parent
75ac109998
commit
9f6f0f748c
|
@ -580,8 +580,10 @@ function processImmediate() {
|
|||
while (immediate) {
|
||||
domain = immediate.domain;
|
||||
|
||||
if (!immediate._onImmediate)
|
||||
if (!immediate._onImmediate) {
|
||||
immediate = immediate._idleNext;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (domain)
|
||||
domain.enter();
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
'use strict';
|
||||
const common = require('../common');
|
||||
|
||||
// This test ensures that if an Immediate callback clears subsequent
|
||||
// immediates we don't get stuck in an infinite loop.
|
||||
//
|
||||
// If the process does get stuck, it will be timed out by the test
|
||||
// runner.
|
||||
//
|
||||
// Ref: https://github.com/nodejs/node/issues/9756
|
||||
|
||||
setImmediate(common.mustCall(function() {
|
||||
clearImmediate(i2);
|
||||
clearImmediate(i3);
|
||||
}));
|
||||
|
||||
const i2 = setImmediate(function() {
|
||||
common.fail('immediate callback should not have fired');
|
||||
});
|
||||
|
||||
const i3 = setImmediate(function() {
|
||||
common.fail('immediate callback should not have fired');
|
||||
});
|
Loading…
Reference in New Issue