From d8c178bc16295b11c445b6f25432e549ef624e77 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Thu, 22 Dec 2011 14:42:20 +0100 Subject: [PATCH] timers: fix performance regression Fix a 5-7% performance regression in the http_simple benchmark that was introduced by the following commits: 348d8cd timers: remove _idleTimeout from item in .unenroll() f2f3028 timers: fix memory leak in setTimeout 098fef6 timers: remember extra setTimeout() arguments when timeout==0 Fix suggested by Bert Belder. --- lib/timers.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/timers.js b/lib/timers.js index 35085e0c15a..7a57d342776 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -108,8 +108,8 @@ var unenroll = exports.unenroll = function(item) { list.close(); delete lists[item._idleTimeout]; } - //if active is called later, then we want to make sure not to insert again - delete item._idleTimeout; + // if active is called later, then we want to make sure not to insert again + item._idleTimeout = -1; }; @@ -151,17 +151,18 @@ exports.setTimeout = function(callback, after) { if (after <= 0) { // Use the slow case for after == 0 timer = new Timer(); + timer._callback = callback; if (arguments.length <= 2) { timer._onTimeout = function() { - callback(); - timer.close(); + this._callback(); + this.close(); } } else { var args = Array.prototype.slice.call(arguments, 2); timer._onTimeout = function() { - callback.apply(timer, args); - timer.close(); + this._callback.apply(timer, args); + this.close(); } }