Skip to content

Commit b000238

Browse files
authored
Merge pull request #28 from jsr-core/fix-mutex
fix: properly clear internal waiters on `Mutex`
2 parents e8a2fce + e324508 commit b000238

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

deno.lock

+31
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mutex.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@
2626
* ```
2727
*/
2828
export class Mutex {
29-
#waiters: Promise<void>[] = [];
29+
#waiters: Set<Promise<void>> = new Set();
3030

3131
/**
3232
* Returns true if the mutex is locked, false otherwise.
3333
*/
3434
get locked(): boolean {
35-
return this.#waiters.length > 0;
35+
return this.#waiters.size > 0;
3636
}
3737

3838
/**
@@ -43,10 +43,11 @@ export class Mutex {
4343
acquire(): Promise<Disposable> & Disposable {
4444
const waiters = [...this.#waiters];
4545
const { promise, resolve } = Promise.withResolvers<void>();
46-
this.#waiters.push(promise);
46+
this.#waiters.add(promise);
4747
const disposable = {
4848
[Symbol.dispose]: () => {
4949
resolve();
50+
this.#waiters.delete(promise);
5051
},
5152
};
5253
return Object.assign(

0 commit comments

Comments
 (0)