refactor: cleanup variables namespace
[poolifier.git] / src / pools / abstract-pool.ts
index 2b59abf27cfa2a37a518610afce2998d2dff1c6a..1341c9afdd8b867faea351389a6f2792b21e7bc6 100644 (file)
@@ -661,7 +661,7 @@ export abstract class AbstractPool<
   >(worker: Worker, listener: (message: MessageValue<Message>) => void): void
 
   /**
-   * Creates a newly worker.
+   * Creates a new worker.
    *
    * @returns Newly created worker.
    */
@@ -717,16 +717,19 @@ export abstract class AbstractPool<
   protected createAndSetupDynamicWorker (): Worker {
     const worker = this.createAndSetupWorker()
     this.registerWorkerMessageListener(worker, message => {
-      const currentWorkerNodeKey = this.getWorkerNodeKey(worker)
+      const workerNodeKey = this.getWorkerNodeKey(worker)
       if (
         isKillBehavior(KillBehaviors.HARD, message.kill) ||
         (message.kill != null &&
-          this.workerNodes[currentWorkerNodeKey].workerUsage.tasks.executing ===
-            0)
+          ((this.opts.enableTasksQueue === false &&
+            this.workerNodes[workerNodeKey].workerUsage.tasks.executing ===
+              0) ||
+            (this.opts.enableTasksQueue === true &&
+              this.workerNodes[workerNodeKey].workerUsage.tasks.executing ===
+                0 &&
+              this.tasksQueueSize(workerNodeKey) === 0)))
       ) {
         // Kill message received from the worker: no new tasks are submitted to that worker for a while ( > maxInactiveTime)
-        this.flushTasksQueue(currentWorkerNodeKey)
-        // FIXME: wait for tasks to be finished
         void (this.destroyWorker(worker) as Promise<void>)
       }
     })
@@ -764,6 +767,7 @@ export abstract class AbstractPool<
               this.dequeueTask(workerNodeKey) as Task<Data>
             )
           }
+          this.workerChoiceStrategyContext.update(workerNodeKey)
         }
       }
     }