Skip to content

Commit

Permalink
refactor: move abort signal handling
Browse files Browse the repository at this point in the history
  • Loading branch information
anton-iskryzhytskyi committed Mar 19, 2020
1 parent 9ce140d commit 8505fd3
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions web-locks.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ class Lock {
if (!buffer) Atomics.store(this.flag, 0, UNLOCKED);
}

enter(handler) {
return new Promise(resolve => {
this.queue.push({ handler, resolve });
enter(handler, signal) {
return new Promise((resolve, reject) => {
this.queue.push({ handler, resolve, reject, signal });
this.trying = true;
setTimeout(() => {
this.tryEnter();
Expand All @@ -38,11 +38,18 @@ class Lock {
if (prev === LOCKED) return;
this.owner = true;
this.trying = false;
const { handler, resolve } = this.queue.shift();
handler(this).finally(() => {

const { handler, resolve, reject, signal } = this.queue.shift();

const finalize = error => {
this.leave();
resolve();
});
if (error) reject(error);
else resolve();
};

if (signal) signal.on('abort', finalize);

handler(this).finally(finalize);
}

leave() {
Expand Down Expand Up @@ -100,16 +107,7 @@ class LockManager {
locks.send(message);
}

const finished = lock.enter(handler);
let aborted = null;
if (signal) {
aborted = new Promise((resolve, reject) => {
signal.on('abort', reject);
});
await Promise.race([finished, aborted]);
} else {
await finished;
}
await lock.enter(handler, signal);

setTimeout(() => {
lock.tryEnter();
Expand Down

0 comments on commit 8505fd3

Please sign in to comment.