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
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
This commit is contained in:
Trevor Norris
2014-11-26 12:27:57 -08:00
parent 3a08b7c3e0
commit 0d051238be
2 changed files with 12 additions and 1 deletions

2
icu_config.gypi Normal file
View File

@@ -0,0 +1,2 @@
# Do not edit. Generated by the configure script.
{ 'variables': { }}

View File

@@ -290,6 +290,14 @@ var Timeout = function(after) {
this._repeat = false;
};
function unrefdHandle() {
this.owner._onTimeout();
if (!this.owner.repeat)
this.owner.close();
}
Timeout.prototype.unref = function() {
if (!this._handle) {
@@ -303,7 +311,8 @@ Timeout.prototype.unref = function() {
if (delay < 0) delay = 0;
exports.unenroll(this);
this._handle = new Timer();
this._handle.ontimeout = this._onTimeout;
this._handle.owner = this;
this._handle.ontimeout = unrefdHandle;
this._handle.start(delay, 0);
this._handle.domain = this.domain;
this._handle.unref();