Skip to content

Commit 13740a4

Browse files
committed
Ensure forcefulShutdown and gracefulShutdown yield the same promises when called a second time
1 parent ae310f5 commit 13740a4

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

src/main.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
FailJobFunction,
1515
GetJobFunction,
1616
Job,
17+
PromiseOrDirect,
1718
RunOnceOptions,
1819
TaskList,
1920
WorkerEventMap,
@@ -709,6 +710,9 @@ export function _runTaskList(
709710
// Make sure Node doesn't get upset about unhandled rejection
710711
abortPromise.then(null, () => /* noop */ void 0);
711712

713+
let gracefulShutdownPromise: PromiseOrDirect<void>;
714+
let forcefulShutdownPromise: PromiseOrDirect<void>;
715+
712716
// This is a representation of us that can be interacted with externally
713717
const workerPool: WorkerPool = {
714718
// "otpool" - "one time pool"
@@ -748,22 +752,17 @@ export function _runTaskList(
748752
logger.error(
749753
`gracefulShutdown called when forcefulShutdown is already in progress`,
750754
);
751-
return;
755+
return forcefulShutdownPromise;
752756
}
753757
if (workerPool._shuttingDown) {
754758
logger.error(
755759
`gracefulShutdown called when gracefulShutdown is already in progress`,
756760
);
757-
return;
761+
return gracefulShutdownPromise;
758762
}
759-
workerPool._shuttingDown = true;
760-
761-
const abortTimer = setTimeout(() => {
762-
abortController.abort();
763-
}, gracefulShutdownAbortTimeout);
764-
abortTimer.unref();
765763

766-
return middleware.run(
764+
workerPool._shuttingDown = true;
765+
gracefulShutdownPromise = middleware.run(
767766
"poolGracefulShutdown",
768767
{ ctx: compiledSharedOptions, workerPool, message },
769768
async ({ message }) => {
@@ -872,6 +871,13 @@ export function _runTaskList(
872871
}
873872
},
874873
);
874+
875+
const abortTimer = setTimeout(() => {
876+
abortController.abort();
877+
}, gracefulShutdownAbortTimeout);
878+
abortTimer.unref();
879+
880+
return gracefulShutdownPromise;
875881
},
876882

877883
/**
@@ -882,13 +888,14 @@ export function _runTaskList(
882888
logger.error(
883889
`forcefulShutdown called when forcefulShutdown is already in progress`,
884890
);
885-
return;
891+
return forcefulShutdownPromise;
886892
}
887-
return middleware.run(
893+
894+
workerPool._forcefulShuttingDown = true;
895+
forcefulShutdownPromise = middleware.run(
888896
"poolForcefulShutdown",
889897
{ ctx: compiledSharedOptions, workerPool: this, message },
890898
async ({ message }) => {
891-
workerPool._forcefulShuttingDown = true;
892899
events.emit("pool:forcefulShutdown", {
893900
pool: workerPool,
894901
workerPool,
@@ -970,6 +977,8 @@ export function _runTaskList(
970977
}
971978
},
972979
);
980+
981+
return forcefulShutdownPromise;
973982
},
974983

975984
promise,

0 commit comments

Comments
 (0)