Skip to content

Commit cb0d823

Browse files
cjihrigtargos
authored andcommitted
cluster: use Map to track handles in master
PR-URL: #23125 Reviewed-By: Gus Caplan <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Trivikram Kamat <[email protected]> Reviewed-By: Denys Otrishko <[email protected]>
1 parent 0f133eb commit cb0d823

File tree

2 files changed

+17
-18
lines changed

2 files changed

+17
-18
lines changed

lib/internal/cluster/master.js

+16-17
Original file line numberDiff line numberDiff line change
@@ -148,20 +148,18 @@ function removeWorker(worker) {
148148
delete cluster.workers[worker.id];
149149

150150
if (keys(cluster.workers).length === 0) {
151-
assert(keys(handles).length === 0, 'Resource leak detected.');
151+
assert(handles.size === 0, 'Resource leak detected.');
152152
intercom.emit('disconnect');
153153
}
154154
}
155155

156156
function removeHandlesForWorker(worker) {
157157
assert(worker);
158158

159-
for (var key in handles) {
160-
const handle = handles[key];
161-
159+
handles.forEach((handle, key) => {
162160
if (handle.remove(worker))
163-
delete handles[key];
164-
}
161+
handles.delete(key);
162+
});
165163
}
166164

167165
cluster.fork = function(env) {
@@ -277,7 +275,7 @@ function queryServer(worker, message) {
277275

278276
const key = `${message.address}:${message.port}:${message.addressType}:` +
279277
`${message.fd}:${message.index}`;
280-
var handle = handles[key];
278+
var handle = handles.get(key);
281279

282280
if (handle === undefined) {
283281
let address = message.address;
@@ -302,12 +300,13 @@ function queryServer(worker, message) {
302300
constructor = SharedHandle;
303301
}
304302

305-
handles[key] = handle = new constructor(key,
306-
address,
307-
message.port,
308-
message.addressType,
309-
message.fd,
310-
message.flags);
303+
handle = new constructor(key,
304+
address,
305+
message.port,
306+
message.addressType,
307+
message.fd,
308+
message.flags);
309+
handles.set(key, handle);
311310
}
312311

313312
if (!handle.data)
@@ -319,11 +318,11 @@ function queryServer(worker, message) {
319318
errno: errno,
320319
key: key,
321320
ack: message.seq,
322-
data: handles[key].data
321+
data: handles.get(key).data
323322
}, reply);
324323

325324
if (errno)
326-
delete handles[key]; // Gives other workers a chance to retry.
325+
handles.delete(key); // Gives other workers a chance to retry.
327326

328327
send(worker, reply, handle);
329328
});
@@ -346,10 +345,10 @@ function listening(worker, message) {
346345
// removed by a prior call to removeHandlesForWorker() so guard against that.
347346
function close(worker, message) {
348347
const key = message.key;
349-
const handle = handles[key];
348+
const handle = handles.get(key);
350349

351350
if (handle && handle.remove(worker))
352-
delete handles[key];
351+
handles.delete(key);
353352
}
354353

355354
function send(worker, message, handle, cb) {

lib/internal/cluster/utils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const util = require('util');
44
module.exports = {
55
sendHelper,
66
internal,
7-
handles: {} // Used in tests.
7+
handles: new Map() // Used in tests.
88
};
99

1010
const callbacks = new Map();

0 commit comments

Comments
 (0)