@@ -22,9 +22,9 @@ class Lock {
2222 if ( ! buffer ) Atomics . store ( this . flag , 0 , UNLOCKED ) ;
2323 }
2424
25- enter ( handler ) {
26- return new Promise ( resolve => {
27- this . queue . push ( { handler, resolve } ) ;
25+ enter ( handler , signal ) {
26+ return new Promise ( ( resolve , reject ) => {
27+ this . queue . push ( { handler, resolve, reject , signal } ) ;
2828 this . trying = true ;
2929 setTimeout ( ( ) => {
3030 this . tryEnter ( ) ;
@@ -38,11 +38,18 @@ class Lock {
3838 if ( prev === LOCKED ) return ;
3939 this . owner = true ;
4040 this . trying = false ;
41- const { handler, resolve } = this . queue . shift ( ) ;
42- handler ( this ) . finally ( ( ) => {
41+
42+ const { handler, resolve, reject, signal } = this . queue . shift ( ) ;
43+
44+ const finalize = error => {
4345 this . leave ( ) ;
44- resolve ( ) ;
45- } ) ;
46+ if ( error ) reject ( error ) ;
47+ else resolve ( ) ;
48+ } ;
49+
50+ if ( signal ) signal . on ( 'abort' , finalize ) ;
51+
52+ handler ( this ) . finally ( finalize ) ;
4653 }
4754
4855 leave ( ) {
@@ -100,16 +107,7 @@ class LockManager {
100107 locks . send ( message ) ;
101108 }
102109
103- const finished = lock . enter ( handler ) ;
104- let aborted = null ;
105- if ( signal ) {
106- aborted = new Promise ( ( resolve , reject ) => {
107- signal . on ( 'abort' , reject ) ;
108- } ) ;
109- await Promise . race ( [ finished , aborted ] ) ;
110- } else {
111- await finished ;
112- }
110+ await lock . enter ( handler , signal ) ;
113111
114112 setTimeout ( ( ) => {
115113 lock . tryEnter ( ) ;
0 commit comments