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 will wakeup the event loop, creating too many of these may adversely effect
event loop performance -- use wisely. event loop performance -- use wisely.
Returns the timer.
## ref() ## ref()
If you had previously `unref()`d a timer you can call `ref()` to explicitly 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 request the timer hold the program open. If the timer is already `ref`d calling
`ref` again will have no effect. `ref` again will have no effect.
Returns the timer.
## setImmediate(callback[, arg][, ...]) ## setImmediate(callback[, arg][, ...])
To schedule the "immediate" execution of `callback` after I/O events 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.domain = this.domain;
this._handle.unref(); this._handle.unref();
} }
return this;
}; };
Timeout.prototype.ref = function() { Timeout.prototype.ref = function() {
if (this._handle) if (this._handle)
this._handle.ref(); this._handle.ref();
return this;
}; };
Timeout.prototype.close = function() { Timeout.prototype.close = function() {
@ -345,6 +347,7 @@ Timeout.prototype.close = function() {
} else { } else {
exports.unenroll(this); 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 LONG_TIME = 10 * 1000;
var SHORT_TIME = 100; 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() { setInterval(function() {
interval_fired = true; interval_fired = true;
}, LONG_TIME).unref(); }, LONG_TIME).unref();

Loading…
Cancel
Save