summaryrefslogtreecommitdiff
path: root/test/parallel/test-next-tick-fixed-queue-regression.js
diff options
context:
space:
mode:
authorAnatoli Papirovski <apapirovski@mac.com>2018-05-02 15:39:08 +0200
committerAnatoli Papirovski <apapirovski@mac.com>2018-05-06 07:21:32 +0200
commit9a3ae2fe9d6ddff6a0de81acb5e0a8c068c0c79d (patch)
tree650d9265545aa9335bf834eccab70ca243c7eadb /test/parallel/test-next-tick-fixed-queue-regression.js
parent6ec43fc28b66587eb176019f488d682d256bd189 (diff)
downloadandroid-node-v8-9a3ae2fe9d6ddff6a0de81acb5e0a8c068c0c79d.tar.gz
android-node-v8-9a3ae2fe9d6ddff6a0de81acb5e0a8c068c0c79d.tar.bz2
android-node-v8-9a3ae2fe9d6ddff6a0de81acb5e0a8c068c0c79d.zip
lib: expose FixedQueue internally and fix nextTick bug
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>
Diffstat (limited to 'test/parallel/test-next-tick-fixed-queue-regression.js')
-rw-r--r--test/parallel/test-next-tick-fixed-queue-regression.js18
1 files changed, 18 insertions, 0 deletions
diff --git a/test/parallel/test-next-tick-fixed-queue-regression.js b/test/parallel/test-next-tick-fixed-queue-regression.js
new file mode 100644
index 0000000000..1fe82d02b1
--- /dev/null
+++ b/test/parallel/test-next-tick-fixed-queue-regression.js
@@ -0,0 +1,18 @@
+'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)));
+ });
+});