Fix EPIPE on shutdown
authoraardizio <alessandroardizio94@gmail.com>
Thu, 18 Feb 2021 13:21:23 +0000 (14:21 +0100)
committeraardizio <alessandroardizio94@gmail.com>
Thu, 18 Feb 2021 13:21:23 +0000 (14:21 +0100)
src/worker/abstract-worker.ts

index 03d954fe62f1933594e4f556511e9762b7093fb5..0a6530e3889c61bb925ce4d787736ba72c104001 100644 (file)
@@ -41,6 +41,11 @@ export abstract class AbstractWorker<
    */
   protected readonly interval?: NodeJS.Timeout
 
+  /**
+   * This value is immediately set to true when the kill from the main worker is received.
+   */
+  private isKilled: boolean = false
+
   /**
    * Constructs a new poolifier worker.
    *
@@ -90,6 +95,7 @@ export abstract class AbstractWorker<
         this.mainWorker = value.parent
       } else if (value.kill) {
         // Here is time to kill this worker, just clearing the interval
+        this.isKilled = true
         if (this.interval) clearInterval(this.interval)
         this.emitDestroy()
       }
@@ -128,7 +134,7 @@ export abstract class AbstractWorker<
    * Check to see if the worker should be terminated, because its living too long.
    */
   protected checkAlive (): void {
-    if (Date.now() - this.lastTask > this.maxInactiveTime) {
+    if (Date.now() - this.lastTask > this.maxInactiveTime && !this.isKilled) {
       this.sendToMainWorker({ kill: this.killBehavior })
     }
   }