From 11309f34e382c3f665bc854ba8b38398c396a6fc Mon Sep 17 00:00:00 2001 From: Kegsay Date: Fri, 30 Jun 2017 15:42:51 +0100 Subject: [PATCH] Reference count calls to start/stopListening on ScalarMessaging (#1164) Otherwise component mounting/unmounting can race and you end up with nothing listening. --- src/ScalarMessaging.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/ScalarMessaging.js b/src/ScalarMessaging.js index 49f1a5c6f9..1104458f22 100644 --- a/src/ScalarMessaging.js +++ b/src/ScalarMessaging.js @@ -564,12 +564,27 @@ const onMessage = function(event) { }); }; +let listenerCount = 0; module.exports = { startListening: function() { - window.addEventListener("message", onMessage, false); + if (listenerCount === 0) { + window.addEventListener("message", onMessage, false); + } + listenerCount += 1; }, stopListening: function() { - window.removeEventListener("message", onMessage); + listenerCount -= 1; + if (listenerCount === 0) { + window.removeEventListener("message", onMessage); + } + if (listenerCount < 0) { + // Make an error so we get a stack trace + const e = new Error( + "ScalarMessaging: mismatched startListening / stopListening detected." + + " Negative count" + ); + console.error(e); + } }, };