That works, yes... thanks!
On Wed, Jun 10, 2009 at 12:58 PM, Neil Brown<nc...@kent.ac.uk> wrote: > Hi, > > I'm presuming the problem with your result is that the "<span..." String is > in the times map, and not in the store map (you weren't clear on the exact > problem). > > I took a look at the code, here's my thoughts on why this occurs. If you > start by putting something in the cache with key "foo", an entry is created > in the times map, say: fromList [(0, "foo")]. If you then get the item from > the cache, you add another item to the times map, giving you: fromList [(0, > "foo"), (1, "foo")]. Another get operation, and you'll have fromList [(0, > "foo"), (1, "foo"), (2, "foo")]. If you now call free on the cache, it > finds the value associated with the minimum key: "foo". But it only deletes > the minimum key in the times map, leaving: fromList [(1, "foo"), (2, > "foo")]. Thus you can have entries in the times map without them being in > the store. put would clear them out (perhaps this was the self-correction > you saw), but get adds one each item, and free only clears one. So you > either need to fix get, or free. > > Does that help, or was your question something else entirely? :-) > > BTW, IntMap.fromList . filter (f . snd) . IntMap.toList is more concisely > (and efficiently) written as: IntMap.filter f > > Thanks, > > Neil. > > Jeff Heard wrote: >> >> The code that causes it is here: >> >> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=5731#a5731 >> >> This is the strangest thing. Occasionally, using nothing but gets and >> puts and frees on a non-full Cache will result in this: >> >> Cache { >> store = fromList >> [("(\"icons/addBookmark.png\",False)",TextureObject {textureID = >> 4}) >> ,("(\"icons/addCircle.png\",False)",TextureObject {textureID = 1}) >> ,("(\"icons/addContent.png\",False)",TextureObject {textureID = 2}) >> ,("(\"icons/addElsewhereLink.png\",False)",TextureObject >> {textureID = 3})] >> , times = fromList >> [(61314,"(\"<span font_desc='sans >> 8'>294.0</span>\",AlignLeft,Nothing,WrapWholeWords,False,0.0,0.0)") >> >> ,(61316,"(\"icons/addBookmark.png\",False)"),(61318,"(\"icons/addCircle.png\",False)") >> >> ,(61320,"(\"icons/addContent.png\",False)"),(61322,"(\"icons/addElsewhereLink.png\",False)")] >> >> , now = 61323 >> , maxsize = 1024768000 >> , size = 4 >> , decimation = 0 >> } >> >> >> Sometimes the problem is self-correcting. Sometimes it is most >> certainly not. But I don't understand how my code can possibly allow >> for this. >> _______________________________________________ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe