De-duplicate code for workers (#154)
[poolifier.git] / src / pools / thread / dynamic.ts
index 77f0a2d569618af2dbbd3d146078ae74be812165..9ab6bf30a7764ff3d18abd5ca99d1896cd055842 100644 (file)
@@ -42,6 +42,8 @@ export class DynamicThreadPool<
    * It will first check for and return an idle thread.
    * If all threads are busy, then it will try to create a new one up to the `max` thread count.
    * If the max thread count is reached, the emitter will emit a `FullPool` event and it will fall back to using a round robin algorithm to distribute the load.
+   *
+   * @returns Thread worker.
    */
   protected chooseWorker (): ThreadWorkerWithMessageChannel {
     let worker: ThreadWorkerWithMessageChannel | undefined
@@ -53,20 +55,19 @@ export class DynamicThreadPool<
     }
 
     if (worker) {
-      // a worker is free, use it
+      // A worker is free, use it
       return worker
     } else {
       if (this.workers.length === this.max) {
         this.emitter.emit('FullPool')
         return super.chooseWorker()
       }
-      // all workers are busy create a new worker
-      const worker = this.internalNewWorker()
+      // All workers are busy, create a new worker
+      const worker = this.createAndSetupWorker()
       worker.port2?.on('message', (message: MessageValue<Data>) => {
         if (message.kill) {
           this.sendToWorker(worker, { kill: 1 })
           void this.destroyWorker(worker)
-          this.removeWorker(worker)
         }
       })
       return worker