mirror of
https://github.com/nodejs/node.git
synced 2025-05-03 13:28:42 +00:00

A bug was introduced together with the FixedQueue implementation for process.nextTick which meant that the queue wouldn't necessarily fully clear on each run through. Fix it and abstract the data structure into an internal module that can later be used elsewhere. PR-URL: https://github.com/nodejs/node/pull/20468 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
19 lines
684 B
JavaScript
19 lines
684 B
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
|
|
// This tests a highly specific regression tied to the FixedQueue size, which
|
|
// was introduced in Node.js 9.7.0: https://github.com/nodejs/node/pull/18617
|
|
// More specifically, a nextTick list could potentially end up not fully
|
|
// clearing in one run through if exactly 2048 ticks were added after
|
|
// microtasks were executed within the nextTick loop.
|
|
|
|
process.nextTick(() => {
|
|
Promise.resolve(1).then(() => {
|
|
for (let i = 0; i < 2047; i++)
|
|
process.nextTick(common.mustCall());
|
|
const immediate = setImmediate(common.mustNotCall());
|
|
process.nextTick(common.mustCall(() => clearImmediate(immediate)));
|
|
});
|
|
});
|