From 1aeec54b7131a68df6eee0f0d9bed0517899004a Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Tue, 20 Dec 2022 19:46:37 +1100 Subject: [PATCH] 0.0.4 release pool semaphore when terminating job --- valuescript-npm/package.json | 2 +- valuescript-npm/src/WorkerPool.ts | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/valuescript-npm/package.json b/valuescript-npm/package.json index 1049f2d..505032f 100644 --- a/valuescript-npm/package.json +++ b/valuescript-npm/package.json @@ -1,6 +1,6 @@ { "name": "valuescript", - "version": "0.0.3", + "version": "0.0.4", "description": "A dialect of TypeScript with value semantics", "main": "dist/index.js", "scripts": { diff --git a/valuescript-npm/src/WorkerPool.ts b/valuescript-npm/src/WorkerPool.ts index 31eaf5e..32e4189 100644 --- a/valuescript-npm/src/WorkerPool.ts +++ b/valuescript-npm/src/WorkerPool.ts @@ -21,7 +21,9 @@ export default class WorkerPool { } async use(fn: (worker: Worker, terminate: () => void) => T): Promise { - return await this.#semaphore.use(async () => { + const release = await this.#semaphore.acquire(); + + try { let bestSlot = this.#slots[0]; for (let i = 1; i < this.size; i++) { @@ -48,7 +50,14 @@ export default class WorkerPool { ); } - return await bestSlot.use(fn); - }); + return await bestSlot.use((worker, terminate) => { + return fn(worker, () => { + terminate(); + release(); + }); + }); + } finally { + release(); + } } }