aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorStephen Blott2015-06-20 09:54:17 +0100
committerStephen Blott2015-06-20 09:54:17 +0100
commitb09822eb349ec88a573d4f450e9b57e8fa3c6473 (patch)
tree0cabb553db04d2d43b2c5472ec7fed9adc576121 /lib
parent1e671e28fd1f348b17ee16351c1a0b03f9d15e4f (diff)
downloadvimium-b09822eb349ec88a573d4f450e9b57e8fa3c6473.tar.bz2
Fix SimpleCache bugs.
This fixes two bugs in SimpleCache. 1. Rotate the cache on the next tick. There is a marginally small chance that the cache will rotate between calls to .has() and .get(). So, we do the rotation ansynchronously. This guarantees that these two functions will always see the same cache state. 2. The implementation of .clear() (which is unused, I think) has at some point become out of date (and incorrect) w.r.t. the implementation of .rotate().
Diffstat (limited to 'lib')
-rw-r--r--lib/utils.coffee13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/utils.coffee b/lib/utils.coffee
index 93045f32..de335452 100644
--- a/lib/utils.coffee
+++ b/lib/utils.coffee
@@ -323,14 +323,15 @@ class SimpleCache
null
rotate: (force = false) ->
- if force or @entries < Object.keys(@cache).length or @expiry < new Date() - @lastRotation
- @lastRotation = new Date()
- @previous = @cache
- @cache = {}
+ Utils.nextTick =>
+ if force or @entries < Object.keys(@cache).length or @expiry < new Date() - @lastRotation
+ @lastRotation = new Date()
+ @previous = @cache
+ @cache = {}
clear: ->
- @rotate true
- @rotate true
+ @cache = {}
+ @previous = {}
# This is a simple class for the common case where we want to use some data value which may be immediately
# available, or for which we may have to wait. It implements a use-immediately-or-wait queue, and calls the