File tree 2 files changed +22
-1
lines changed
2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -315,12 +315,16 @@ class LRUCache {
315
315
316
316
purgeStale ( ) {
317
317
let deleted = false
318
+ const toDelete = [ ]
318
319
for ( const i of this . rindexes ( { allowStale : true } ) ) {
319
320
if ( this . isStale ( i ) ) {
320
- this . delete ( this . keyList [ i ] )
321
+ toDelete . push ( this . keyList [ i ] )
321
322
deleted = true
322
323
}
323
324
}
325
+ for ( const k of toDelete ) {
326
+ this . delete ( k )
327
+ }
324
328
return deleted
325
329
}
326
330
Original file line number Diff line number Diff line change @@ -359,6 +359,23 @@ const runTests = (LRU, t) => {
359
359
t . end ( )
360
360
} )
361
361
362
+ t . test ( 'purgeStale() lockup' , t => {
363
+ const c = new LRU ( {
364
+ max : 3 ,
365
+ ttl : 10 ,
366
+ updateAgeOnGet : true ,
367
+ } )
368
+ c . set ( 1 , 1 )
369
+ c . set ( 2 , 2 )
370
+ c . set ( 3 , 3 )
371
+ clock . advance ( 5 )
372
+ c . get ( 2 )
373
+ clock . advance ( 15 )
374
+ c . purgeStale ( )
375
+ t . pass ( 'did not get locked up' )
376
+ t . end ( )
377
+ } )
378
+
362
379
t . end ( )
363
380
}
364
381
You can’t perform that action at this time.
0 commit comments