From b0026ed9fc863727fc4c958641582caa08bb03e2 Mon Sep 17 00:00:00 2001 From: Viktor Polishchuk Date: Mon, 22 Apr 2019 16:23:05 +0300 Subject: [PATCH 1/2] Avoiding recreating logger for the namespace which has been already created. Fix memory leak for a fixed number of categories. For dynamic categories method destroy is still required. #678 --- src/common.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/common.js b/src/common.js index 2f82b8dc..de1ca025 100644 --- a/src/common.js +++ b/src/common.js @@ -19,8 +19,9 @@ function setup(env) { /** * Active `debug` instances. + * @type {Object} */ - createDebug.instances = []; + createDebug.instances = {}; /** * The currently active debug mode names, and names to skip. @@ -62,7 +63,11 @@ function setup(env) { * @api public */ function createDebug(namespace) { - let prevTime; + let prevTime, value = createDebug.instances[namespace]; + + if (!!value) { + return value; + } function debug(...args) { // Disabled? @@ -74,8 +79,7 @@ function setup(env) { // Set `diff` timestamp const curr = Number(new Date()); - const ms = curr - (prevTime || curr); - self.diff = ms; + self.diff = curr - (prevTime || curr); self.prev = prevTime; self.curr = curr; prevTime = curr; @@ -128,15 +132,14 @@ function setup(env) { createDebug.init(debug); } - createDebug.instances.push(debug); + createDebug.instances[namespace] = debug; return debug; } function destroy() { - const index = createDebug.instances.indexOf(this); - if (index !== -1) { - createDebug.instances.splice(index, 1); + if (createDebug.instances.hasOwnProperty(this.namespace)) { + delete createDebug.instances[this.namespace]; return true; } return false; @@ -180,8 +183,10 @@ function setup(env) { } } - for (i = 0; i < createDebug.instances.length; i++) { - const instance = createDebug.instances[i]; + const keys = Object.keys(createDebug.instances); + + for (i = 0; i < keys.length; i++) { + const instance = createDebug.instances[keys[i]]; instance.enabled = createDebug.enabled(instance.namespace); } } From 54d4acc58d324879a5a36ad7984fa96a8c354fe8 Mon Sep 17 00:00:00 2001 From: Viktor Polishchuk Date: Tue, 30 Apr 2019 10:12:59 +0300 Subject: [PATCH 2/2] Fixed lint errors #678 --- src/common.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/common.js b/src/common.js index de1ca025..56b7737d 100644 --- a/src/common.js +++ b/src/common.js @@ -63,9 +63,10 @@ function setup(env) { * @api public */ function createDebug(namespace) { - let prevTime, value = createDebug.instances[namespace]; + let prevTime; + const value = createDebug.instances[namespace]; - if (!!value) { + if (value !== undefined) { return value; } @@ -138,7 +139,7 @@ function setup(env) { } function destroy() { - if (createDebug.instances.hasOwnProperty(this.namespace)) { + if (createDebug.instances[this.namespace] !== undefined) { delete createDebug.instances[this.namespace]; return true; }