From 2e1dcaf2ee23e62135ec5094b2bebc66f3cc6685 Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Tue, 2 Nov 2021 18:01:15 -0700 Subject: [PATCH] chore: fix race in grid server (#9999) --- packages/playwright-core/src/grid/gridServer.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/playwright-core/src/grid/gridServer.ts b/packages/playwright-core/src/grid/gridServer.ts index 2bcebc9a57..da09d6da4f 100644 --- a/packages/playwright-core/src/grid/gridServer.ts +++ b/packages/playwright-core/src/grid/gridServer.ts @@ -101,7 +101,7 @@ class GridAgent extends EventEmitter { private _ws: WebSocket | undefined; readonly _workers = new Map(); private _status: AgentStatus = 'none'; - private _workersWaitingForAgentConnected: GridWorker[] = []; + private _workersWaitingForAgentConnected: Set = new Set(); private _retireTimeout = 30000; private _retireTimeoutId: NodeJS.Timeout | undefined; private _log: debug.Debugger; @@ -135,7 +135,7 @@ class GridAgent extends EventEmitter { this._log(`send worker id: ${worker.workerId}`); ws.send(worker.workerId); } - this._workersWaitingForAgentConnected = []; + this._workersWaitingForAgentConnected.clear(); } canCreateWorker() { @@ -152,6 +152,7 @@ class GridAgent extends EventEmitter { this._workers.set(worker.workerId, worker); worker.on('close', () => { this._workers.delete(worker.workerId); + this._workersWaitingForAgentConnected.delete(worker); if (!this._workers.size) { this.setStatus('retiring'); if (this._retireTimeoutId) @@ -164,7 +165,7 @@ class GridAgent extends EventEmitter { this._log(`send worker id: ${worker.workerId}`); this._ws.send(worker.workerId); } else { - this._workersWaitingForAgentConnected.push(worker); + this._workersWaitingForAgentConnected.add(worker); } }