Skip to content

Commit 212804e

Browse files
committed
fix: purgeStale lockup on list reordering
Fix: ##209
1 parent 04765f8 commit 212804e

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

Diff for: index.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -315,12 +315,16 @@ class LRUCache {
315315

316316
purgeStale () {
317317
let deleted = false
318+
const toDelete = []
318319
for (const i of this.rindexes({ allowStale: true })) {
319320
if (this.isStale(i)) {
320-
this.delete(this.keyList[i])
321+
toDelete.push(this.keyList[i])
321322
deleted = true
322323
}
323324
}
325+
for (const k of toDelete) {
326+
this.delete(k)
327+
}
324328
return deleted
325329
}
326330

Diff for: test/ttl.js

+17
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,23 @@ const runTests = (LRU, t) => {
359359
t.end()
360360
})
361361

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+
362379
t.end()
363380
}
364381

0 commit comments

Comments
 (0)