fix: interrupt idle worker waits during shutdown

This commit is contained in:
Paul Nothaft
2026-09-08 15:54:01 +02:00
parent 20a291eb34
commit a31a2e25e2
4 changed files with 232 additions and 14 deletions
+25
View File
@@ -0,0 +1,25 @@
/** A run owns its waits; cancelling wakes every waiter and clears its timer. */
function createInterruptibleSleep() {
let cancelled = false;
const waiters = new Set();
return {
sleep(ms) {
if (cancelled) return Promise.resolve();
return new Promise(resolve => {
const finish = () => {
clearTimeout(timer);
waiters.delete(finish);
resolve();
};
const timer = setTimeout(finish, ms);
waiters.add(finish);
});
},
cancel() {
cancelled = true;
for (const finish of waiters) finish();
},
};
}
module.exports = { createInterruptibleSleep };