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

Reply via email to