Browse Source

timer: ref/unref return self

Most calls to ref() and unref() are chainable, timers should be
chainable, too.

Typical use:

    var to = setTimeout(ontimeout, 123).unref();

PR-URL: https://github.com/nodejs/node/pull/2905
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Trevor Norris <trevnorris@nodejs.org>
v5.x
Sam Roberts 10 years ago
parent
commit
94e663ac5f
  1. 4
      doc/api/timers.markdown
  2. 3
      lib/timers.js
  3. 8
      test/parallel/test-timers-unref.js

4
doc/api/timers.markdown

@ -41,12 +41,16 @@ In the case of `setTimeout` when you `unref` you create a separate timer that
will wakeup the event loop, creating too many of these may adversely effect
event loop performance -- use wisely.
Returns the timer.
## ref()
If you had previously `unref()`d a timer you can call `ref()` to explicitly
request the timer hold the program open. If the timer is already `ref`d calling
`ref` again will have no effect.
Returns the timer.
## setImmediate(callback[, arg][, ...])
To schedule the "immediate" execution of `callback` after I/O events

3
lib/timers.js

@ -330,11 +330,13 @@ Timeout.prototype.unref = function() {
this._handle.domain = this.domain;
this._handle.unref();
}
return this;
};
Timeout.prototype.ref = function() {
if (this._handle)
this._handle.ref();
return this;
};
Timeout.prototype.close = function() {
@ -345,6 +347,7 @@ Timeout.prototype.close = function() {
} else {
exports.unenroll(this);
}
return this;
};

8
test/parallel/test-timers-unref.js

@ -12,6 +12,14 @@ var interval_fired = false,
var LONG_TIME = 10 * 1000;
var SHORT_TIME = 100;
assert.doesNotThrow(function() {
setTimeout(function() {}, 10).unref().ref().unref();
}, 'ref and unref are chainable');
assert.doesNotThrow(function() {
setInterval(function() {}, 10).unref().ref().unref();
}, 'ref and unref are chainable');
setInterval(function() {
interval_fired = true;
}, LONG_TIME).unref();

Loading…
Cancel
Save