[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