From b7548687d82a2216a2822e945111f7d98febcb02 Mon Sep 17 00:00:00 2001 From: George Turkin Date: Thu, 4 Oct 2018 18:04:42 +0300 Subject: [PATCH 1/2] EventEmitter bug fix this.tmpArray was not cleaned after every event emission. This caused listeners to leak to the events they don't belong to and crash the app. By the way, do we really need to store tmpArray globally (this.tmpArray)? Maybe just create an empty local tmpArray every time? --- src/events/EventEmitter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/events/EventEmitter.js b/src/events/EventEmitter.js index 25da18a6..4a80d46a 100644 --- a/src/events/EventEmitter.js +++ b/src/events/EventEmitter.js @@ -124,7 +124,7 @@ EventEmitter.prototype = { var listener = tmpArray[ i ]; listener.call( listener.context, event ); } - tmpArray.length = 0; + this.tmpArray.length = 0; } return this; } From 857b1ee8d720dd9d7c129631fb30aee8fbec3faf Mon Sep 17 00:00:00 2001 From: George Turkin Date: Thu, 4 Oct 2018 18:46:15 +0300 Subject: [PATCH 2/2] fix the previous attempt didn't help, removed this.tmpArray. Now it works --- src/events/EventEmitter.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/events/EventEmitter.js b/src/events/EventEmitter.js index 4a80d46a..47c726a2 100644 --- a/src/events/EventEmitter.js +++ b/src/events/EventEmitter.js @@ -15,7 +15,6 @@ module.exports = EventEmitter; * }); */ function EventEmitter() { - this.tmpArray = []; } EventEmitter.prototype = { @@ -116,7 +115,7 @@ EventEmitter.prototype = { event.target = this; // Need to copy the listener array, in case some listener was added/removed inside a listener - var tmpArray = this.tmpArray; + var tmpArray = []; for (var i = 0, l = listenerArray.length; i < l; i++) { tmpArray[i] = listenerArray[i]; } @@ -124,7 +123,6 @@ EventEmitter.prototype = { var listener = tmpArray[ i ]; listener.call( listener.context, event ); } - this.tmpArray.length = 0; } return this; }