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