Browse Source

console: delete timers that have ended

Currently, console timers that have been ended with timeEnd()
are not removed. This has the potential to leak memory. This
commit deletes ended timers from the containing Map.

PR-URL: https://github.com/nodejs/node/pull/3562
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Evan Lucas <evanlucas@me.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Michaël Zasso <mic.besace@gmail.com>
process-exit-stdio-flushing
Vladimir Varankin 9 years ago
committed by cjihrig
parent
commit
a5cce79ec3
  1. 1
      lib/console.js
  2. 10
      test/parallel/test-console.js

1
lib/console.js

@ -68,6 +68,7 @@ Console.prototype.timeEnd = function(label) {
const duration = process.hrtime(time); const duration = process.hrtime(time);
const ms = duration[0] * 1000 + duration[1] / 1e6; const ms = duration[0] * 1000 + duration[1] / 1e6;
this.log('%s: %sms', label, ms.toFixed(3)); this.log('%s: %sms', label, ms.toFixed(3));
this._times.delete(label);
}; };

10
test/parallel/test-console.js

@ -57,6 +57,16 @@ console.timeEnd('hasOwnProperty');
global.process.stdout.write = stdout_write; global.process.stdout.write = stdout_write;
// verify that console.timeEnd() doesn't leave dead links
const timesMapSize = console._times.size;
console.time('label1');
console.time('label2');
console.time('label3');
console.timeEnd('label1');
console.timeEnd('label2');
console.timeEnd('label3');
assert.strictEqual(console._times.size, timesMapSize);
assert.equal('foo\n', strings.shift()); assert.equal('foo\n', strings.shift());
assert.equal('foo bar\n', strings.shift()); assert.equal('foo bar\n', strings.shift());
assert.equal('foo bar hop\n', strings.shift()); assert.equal('foo bar hop\n', strings.shift());

Loading…
Cancel
Save