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>
This commit is contained in:
parent
b6e22c4bd5
commit
0e061975d7
@ -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…
x
Reference in New Issue
Block a user