Skip to content

Commit

Permalink
timer: ref/unref return self
Browse files Browse the repository at this point in the history
Most calls to ref() and unref() are chainable, timers should be
chainable, too.

Typical use:

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

PR-URL: #2905
Reviewed-By: Jeremiah Senkpiel <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Trevor Norris <[email protected]>
  • Loading branch information
sam-github authored and Fishrock123 committed Sep 16, 2015
1 parent 4b4cfa2 commit f931b9d
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 0 deletions.
4 changes: 4 additions & 0 deletions doc/api/timers.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions lib/timers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -345,6 +347,7 @@ Timeout.prototype.close = function() {
} else {
exports.unenroll(this);
}
return this;
};


Expand Down
8 changes: 8 additions & 0 deletions test/parallel/test-timers-unref.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit f931b9d

Please sign in to comment.