From 22f51a6a8319b312ed5899a979d9e57b5cefde0e Mon Sep 17 00:00:00 2001 From: cjihrig Date: Thu, 27 Sep 2018 09:35:21 -0400 Subject: [PATCH] cluster: use Map to track callbacks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use a Map to avoid delete operations in callback tracking. PR-URL: https://github.com/nodejs/node/pull/23125 Reviewed-By: Gus Caplan Reviewed-By: Michaƫl Zasso Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Denys Otrishko --- lib/internal/cluster/utils.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/internal/cluster/utils.js b/lib/internal/cluster/utils.js index ba72ff90945d3c..94b82d039a098a 100644 --- a/lib/internal/cluster/utils.js +++ b/lib/internal/cluster/utils.js @@ -7,7 +7,7 @@ module.exports = { handles: {} // Used in tests. }; -const callbacks = {}; +const callbacks = new Map(); var seq = 0; function sendHelper(proc, message, handle, cb) { @@ -18,7 +18,7 @@ function sendHelper(proc, message, handle, cb) { message = util._extend({ cmd: 'NODE_CLUSTER' }, message); if (typeof cb === 'function') - callbacks[seq] = cb; + callbacks.set(seq, cb); message.seq = seq; seq += 1; @@ -34,9 +34,13 @@ function internal(worker, cb) { var fn = cb; - if (message.ack !== undefined && callbacks[message.ack] !== undefined) { - fn = callbacks[message.ack]; - delete callbacks[message.ack]; + if (message.ack !== undefined) { + const callback = callbacks.get(message.ack); + + if (callback !== undefined) { + fn = callback; + callbacks.delete(message.ack); + } } fn.apply(worker, arguments);