From 0d051238be2e07e671d7d9f4f444e0cc1efadf1b Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Wed, 26 Nov 2014 12:27:57 -0800 Subject: 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 --- lib/timers.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'lib/timers.js') diff --git a/lib/timers.js b/lib/timers.js index be39ea66d..1893f1978 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -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(); -- cgit v1.2.1