Hi.
I made a little investigation..

The changes file condensing works fine.
Except that there something wrong with destroying source pointers of
not-installed methods.

After commenting a following line:
"       CompiledMethod allInstancesDo: [:e | e isInstalled ifFalse: [e
destroySourcePointer]]. "

It were able to run to an end, and by running this check:

| empty |
empty := Set new.
Smalltalk allClassesAndTraitsDo: [:classOrTrait |
 empty addAll: (        classOrTrait methodDict select: [:m | m sourcePointer 
=0 ])
        ].
empty isEmpty
-->> prints true

which means there is no installed methods with sourcePointer = 0 (and
hence with no source code) after condensing the changes.


But what makes me really suspicious is following:

CompiledMethod allInstances size 55797
(CompiledMethod allInstances reject: #isInstalled) size  12586

it looks like #isInstalled is buggy, or otherwise indicating that
there is problem with image,
which keeps so many non-installed methods hanging around.
I would simply put a following at the beginning of #condenseChanges:

(CompiledMethod allInstances reject: #isInstalled) size > 0 ifTrue: [
self error: 'first, get rid of any uninstalled methods' ].

So, then you would not need to use #destroySourcePointer :)

Here an alternative version of #destroySourcePointer. But it doesn't
makes any big difference.

destroySourcePointer

        "We can't change the trailer of existing method, since
        it could have completely different format. Therefore we need to
        generate a copy with new trailer, and then #become it"
        | copy |
        copy := self copyWithTrailerBytes: CompiledMethodTrailer empty.
        self becomeForward: copy.
        ^ copy


P.S. runned it on 1.1-11343-UNSTABLE

-- 
Best regards,
Igor Stasenko AKA sig.

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

Reply via email to