timers: don't close interval timers when unrefd
authorJulien Gilli <julien.gilli@joyent.com>
Fri, 19 Dec 2014 00:51:08 +0000 (16:51 -0800)
committerFedor Indutny <fedor@indutny.com>
Fri, 3 Apr 2015 23:30:33 +0000 (02:30 +0300)
This change fixes a regression introduced by commit
0d051238be2e07e671d7d9f4f444e0cc1efadf1b, which contained a typo that
would cause every unrefd interval to fire only once.

Fixes: https://github.com/joyent/node/issues/8900
Reviewed-By: Timothy J Fontaine <tjfontaine@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
lib/timers.js
test/parallel/test-timers-unrefd-interval-still-fires.js [new file with mode: 0644]

index 302a11e..4427894 100644 (file)
@@ -304,7 +304,7 @@ const Timeout = function(after) {
 
 function unrefdHandle() {
   this.owner._onTimeout();
-  if (!this.owner.repeat)
+  if (!this.owner._repeat)
     this.owner.close();
 }
 
diff --git a/test/parallel/test-timers-unrefd-interval-still-fires.js b/test/parallel/test-timers-unrefd-interval-still-fires.js
new file mode 100644 (file)
index 0000000..3ea9445
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * This test is a regression test for joyent/node#8900.
+ */
+var assert = require('assert');
+
+var N = 5;
+var nbIntervalFired = 0;
+var timer = setInterval(function() {
+  ++nbIntervalFired;
+  if (nbIntervalFired === N)
+    clearInterval(timer);
+}, 1);
+
+timer.unref();
+
+setTimeout(function onTimeout() {
+  assert.strictEqual(nbIntervalFired, N);
+}, 100);