From 905d100d4def974223a128c6276d4a5833c04955 Mon Sep 17 00:00:00 2001 From: SpaceEEC Date: Sun, 3 Oct 2021 15:04:23 +0200 Subject: [PATCH] fix(Shard): use provided timeout when respawning (#6735) --- src/sharding/Shard.js | 12 ++++++++---- typings/index.d.ts | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/sharding/Shard.js b/src/sharding/Shard.js index e42d3c8b0..02d0128ef 100644 --- a/src/sharding/Shard.js +++ b/src/sharding/Shard.js @@ -92,7 +92,7 @@ class Shard extends EventEmitter { * @type {Function} * @private */ - this._exitListener = this._handleExit.bind(this, undefined); + this._exitListener = null; } /** @@ -106,6 +106,8 @@ class Shard extends EventEmitter { if (this.process) throw new Error('SHARDING_PROCESS_EXISTS', this.id); if (this.worker) throw new Error('SHARDING_WORKER_EXISTS', this.id); + this._exitListener = this._handleExit.bind(this, undefined, timeout); + if (this.manager.mode === 'process') { this.process = childProcess .fork(path.resolve(this.manager.file), this.args, { @@ -132,7 +134,7 @@ class Shard extends EventEmitter { */ this.emit('spawn', child); - if (timeout === -1 || timeout === Infinity) return child; + if (timeout === -1 || timeout === Infinity) return Promise.resolve(child); return new Promise((resolve, reject) => { const cleanup = () => { clearTimeout(spawnTimeoutTimer); @@ -379,9 +381,11 @@ class Shard extends EventEmitter { /** * Handles the shard's process/worker exiting. * @param {boolean} [respawn=this.manager.respawn] Whether to spawn the shard again + * @param {number} [timeout] The amount in milliseconds to wait until the {@link Client} + * has become ready (`-1` or `Infinity` for no wait) * @private */ - _handleExit(respawn = this.manager.respawn) { + _handleExit(respawn = this.manager.respawn, timeout) { /** * Emitted upon the shard's child process/worker exiting. * @event Shard#death @@ -395,7 +399,7 @@ class Shard extends EventEmitter { this._evals.clear(); this._fetches.clear(); - if (respawn) this.spawn().catch(err => this.emit('error', err)); + if (respawn) this.spawn(timeout).catch(err => this.emit('error', err)); } } diff --git a/typings/index.d.ts b/typings/index.d.ts index 991b3d4cf..ef7516e34 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -1677,7 +1677,7 @@ export class Shard extends EventEmitter { private _evals: Map>; private _exitListener: (...args: any[]) => void; private _fetches: Map>; - private _handleExit(respawn?: boolean): void; + private _handleExit(respawn?: boolean, timeout?: number): void; private _handleMessage(message: unknown): void; public args: string[];