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(); + } } }