X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fpools%2Fabstract-pool.ts;h=604c7af8ad32dde3959dcb75166427458999c9f7;hb=4ef0b45781a9a2a1416c4bb62d700a0c70e71145;hp=ef5ebeadd6ad08e3ce6a37eb04aa425280a618af;hpb=7c48b2a96e4a42d627bc08f67173956f1d2e30af;p=poolifier.git diff --git a/src/pools/abstract-pool.ts b/src/pools/abstract-pool.ts index ef5ebead..604c7af8 100644 --- a/src/pools/abstract-pool.ts +++ b/src/pools/abstract-pool.ts @@ -17,6 +17,7 @@ import { max, median, min, + once, round } from '../utils' import { KillBehaviors } from '../worker/worker-options' @@ -974,6 +975,7 @@ export abstract class AbstractPool< ) } } + // FIXME: should be registered only once this.registerWorkerMessageListener(workerNodeKey, killMessageListener) this.sendToWorker(workerNodeKey, { kill: true }) }) @@ -1219,8 +1221,8 @@ export abstract class AbstractPool< worker.on('error', this.opts.errorHandler ?? EMPTY_FUNCTION) worker.on('error', error => { const workerNodeKey = this.getWorkerNodeKeyByWorker(worker) + this.flagWorkerNodeAsNotReady(workerNodeKey) const workerInfo = this.getWorkerInfo(workerNodeKey) - workerInfo.ready = false this.emitter?.emit(PoolEvents.error, error) this.workerNodes[workerNodeKey].closeChannel() if ( @@ -1541,7 +1543,11 @@ export abstract class AbstractPool< workerInfo.ready = message.ready as boolean workerInfo.taskFunctionNames = message.taskFunctionNames if (this.ready) { - this.emitter?.emit(PoolEvents.ready, this.info) + const emitPoolReadyEventOnce = once( + () => this.emitter?.emit(PoolEvents.ready, this.info), + this + ) + emitPoolReadyEventOnce() } }