The MapCache is not registered for finalization, IIRC.
The new WeakKeyDictionary does not work reliably without being registered.
See also http://code.google.com/p/pharo/issues/detail?id=1628.
I remember wanting to retract some parts of comment #2 after further 
investigation, but I no longer remember which :)
Should give some pointers though.

Cheers,
Henry

On 31.12.2009 17:41, Martin McClure wrote:
> Stéphane Ducasse wrote:
>    
>> Probably the changes of Martin von Lowis.
>> I imagine that when marcus is bad from holidays he can tell us more.
>>
>> Now I try to reproduce it in 11128.
>>
>> I put a self halt in a method and execute the method.
>> And I got no problem.
>> After I tried to select 'self halt' + doit in the debugger itself and it 
>> worked too.
>>
>> Did you have a way reproduce it systematically ?
>>      
> Where did you get your image from? If you had an older image and applied
> updates the corruption may not be there.
>
> For me, it reproduces 100% in a downloaded
> pharo1.1-11112-alphadev09.12.2 image, and it also reproduced it in that
> image with all updates applied, and I may have also had this problem in
> the latest core download.
>
> Regards,
>
> -Martin
>
>
>    
>> On Dec 31, 2009, at 4:17 AM, Martin McClure wrote:
>>
>>      
>>> This one's pretty nasty.
>>>
>>> Symptom:
>>>
>>> The debugger in recent and current 1.1 images is completely broken.
>>>
>>> To reproduce (save your image first!):
>>>
>>> "self halt" doit. It goes into an infinite loop, and if there's a way to
>>> get out of that without killing the VM I'd like to know about it. Alt-.
>>> works, but just tries to open another debugger, which goes into another
>>> infinite loop, etc.
>>>
>>>
>>>
>>> Cause:
>>>
>>> DebuggerMethodMap>MapCache is a WeakIdentityKeyDictionary, but it is
>>> corrupt. It has an array of 22 nils, expired is 0, so it contains
>>> nothing, but tally=16.
>>>
>>> This causes MapCache to lie about its size.
>>>
>>> This drives DebuggerMethodMap class>>cacheDebugMap:forMethod: into an
>>> infinite loop, the whileTrue: condition is always true, it keeps trying
>>> to remove non-existent elements to get the size to be less than 16 but
>>> the size is always 16.
>>>
>>> I don't see any obvious code paths to get into this state. I suspect it
>>> may have been left in this state when weak collections were updated with
>>> the new code not too long ago.
>>>
>>>
>>> Cure:
>>>
>>> In an inspector, set tally=0. Debuggers then work again.
>>>
>>> Not sure how to package this as a slice, so I'll leave the update to
>>> someone else, and get back to hashing, which was hard when every
>>> walkback froze my system :-)
>>>
>>>
>>> Regards,
>>>
>>> -Martin
>>>        
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
>    


_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to