Browse Source

timers: fix unref() memory leak

The destructor isn't being called for timers that have been unref'd.

Fixes: https://github.com/joyent/node/issues/8364
PR-URL: https://github.com/iojs/io.js/pull/1330
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
v1.8.0-commit
Trevor Norris 10 years ago
committed by Fedor Indutny
parent
commit
0e061975d7
  1. 11
      lib/timers.js

11
lib/timers.js

@ -301,6 +301,14 @@ const Timeout = function(after) {
this._repeat = null;
};
function unrefdHandle() {
this.owner._onTimeout();
if (!this.owner.repeat)
this.owner.close();
}
Timeout.prototype.unref = function() {
if (this._handle) {
this._handle.unref();
@ -315,7 +323,8 @@ Timeout.prototype.unref = function() {
if (this._called && !this._repeat) return;
this._handle = new Timer();
this._handle[kOnTimeout] = this._onTimeout;
this._handle.owner = this;
this._handle[kOnTimeout] = unrefdHandle;
this._handle.start(delay, 0);
this._handle.domain = this.domain;
this._handle.unref();

Loading…
Cancel
Save