From 5289d351459de4f29df462dd172fef6df609b5f9 Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Fri, 11 Oct 2013 13:44:48 -0700 Subject: [PATCH] Fix eviction in MonoCache::find_or_create --- src/components/util/cache.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/util/cache.rs b/src/components/util/cache.rs index e8cf2c56947..02859014bbd 100644 --- a/src/components/util/cache.rs +++ b/src/components/util/cache.rs @@ -34,13 +34,13 @@ impl Cache for MonoCache { } fn find_or_create(&mut self, key: &K, blk: &fn(&K) -> V) -> V { - match self.entry { - None => { + match self.find(key) { + Some(value) => value, + None => { let value = blk(key); self.entry = Some((key.clone(), value.clone())); value - }, - Some((ref _k, ref v)) => v.clone() + } } } @@ -58,11 +58,9 @@ fn test_monocache() { assert!(cache.find(&1).is_some()); assert!(cache.find(&2).is_none()); - /* FIXME: clarify behavior here: cache.find_or_create(&2, |_v| { two }); assert!(cache.find(&2).is_some()); assert!(cache.find(&1).is_none()); - */ } pub struct HashCache {