Skip to content

Commit 5608520

Browse files
fix(#805): Fix handling of aborted tasks (#807)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1 parent d625bba commit 5608520

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ class ThreadPool {
455455
_distributeTask (task: TaskInfo, workers: PiscinaWorker[]): boolean {
456456
// We need to verify if the task is aborted already or not
457457
// otherwise we might be distributing aborted tasks to workers
458-
if (task.aborted) return false;
458+
if (task.aborted) return true;
459459

460460
const candidate = this.balancer(task.interface, workers);
461461

test/pool.test.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,31 @@ test('Explicit resource management (asyncDispose)', { skip: nodeVersion !== 24 }
103103
tasks.push(pool.run('new Promise(resolve => setTimeout(resolve, 500))'));
104104
}
105105
}
106-
})
106+
})
107+
108+
test('#805 - Concurrent Aborts', async (t: TestContext) => {
109+
const pool = new Piscina({
110+
filename: resolve(__dirname, 'fixtures/eval.js'),
111+
maxThreads: 1,
112+
minThreads: 1,
113+
concurrentTasksPerWorker: 1,
114+
});
115+
116+
t.after(() => pool.close());
117+
118+
t.plan(2);
119+
const tasks = [];
120+
const controller = new AbortController();
121+
const controller2 = new AbortController();
122+
const controller3 = new AbortController();
123+
124+
tasks.push(t.assert.rejects(pool.run('new Promise(resolve => setTimeout(resolve, 1500))', { signal: controller.signal })));
125+
tasks.push(t.assert.rejects(pool.run('new Promise(resolve => setTimeout(resolve, 1500))', { signal: controller2.signal })));
126+
tasks.push(pool.run('new Promise(resolve => setTimeout(resolve, 1000))', { signal: controller3.signal }));
127+
128+
129+
controller.abort();
130+
controller2.abort();
131+
132+
await Promise.all(tasks);
133+
});

0 commit comments

Comments
 (0)