On Wed, Jan 18, 2012 at 8:30 AM, St�phane Ducasse <stephane.ducasse@inria.fr> wrote:
Thanks.
Mariano I remember that with marcus we got the same impression: that the copyFrom: trick to avoid
a full scan was the cause of the trouble.
But I remember that you said that you had still a problem.

I notice that the compact/rehash of CompiledMethod is involved to reproduce this problem, but also I notice that the problem happens with the old version of #compact/#rehash


> Here's the fix:
>
> I reverted MethodDictionary>>#compact to its previous version:
>
> compact
> � � � "Make sure that I have the highest possible load factor (at least 50%)."
>
> � � � self become: self compactWithoutBecome
>
>
> The non-working version was:
>
> compact
> � � � "Make sure that I have the highest possible load factor (between 37.5% and 75%)."
>
> � � � | newInstance |
> � � � newInstance := self compactWithoutBecome.
> � � � newInstance capacity = self capacity
> � � � � � � � ifTrue: [ self copyFrom: newInstance ]
> � � � � � � � ifFalse: [ self becomeForward: newInstance ]
>
> After reverting, #cleanUpForRelease worked without problem.
>
>





--
Mariano
http://marianopeck.wordpress.com