[Haskell-cafe] Weird and entirely random problem...
Jeff Heard
jefferson.r.heard at gmail.com
Wed Jun 10 13:26:33 EDT 2009
That works, yes... thanks!
On Wed, Jun 10, 2009 at 12:58 PM, Neil Brown<nccb2 at 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 at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>
>
More information about the Haskell-Cafe
mailing list