On 10 May 2011 11:27, Mariano Martinez Peck <[email protected]> wrote: > > > On Tue, May 10, 2011 at 10:59 AM, Igor Stasenko <[email protected]> wrote: >> >> On 10 May 2011 09:48, Mariano Martinez Peck <[email protected]> wrote: >> > >> > >> > On Tue, May 10, 2011 at 9:41 AM, Marcus Denker <[email protected]> >> > wrote: >> >> >> >> On May 10, 2011, at 9:32 AM, Mariano Martinez Peck wrote: >> >> >> >> > >> >> > what is even worst, is that even after removing those correct CM, and >> >> > doing a GC etc...they still don't disappear. >> >> > >> >> >> >> There is >> >> >> >> ScriptLoader new cleanUpMethods >> >> >> >> This is called from #cleanUpForRelease and normally should make sure >> >> there >> >> are no old methods. >> >> >> > >> > >> > hehehehe if I do: ScriptLoader new cleanUpForRelease, then inspect >> > ((CompiledMethod allInstances select: [:each | each trailer kind = >> > #VarLengthSourcePointer] ) ) >> > >> > they are not GC'ed and if then I click on the first element in the >> > inspector.... VM CRASH!!! with both, InterpreterVM and CogVM. >> > >> > :( >> > >> >> okay. it seems i found the offender. Its a CompiledMethod class>>cleanUp. >> It changing a source pointer of all non-installed methods to 0. > > Good catch!!! :) Anyway, why CompiledMethod class >>cleanUp would like to > destroy source pointers??? > If I understood correctly (please correct me), all compiled methods will > loose the pointer to sources and hence they will be decompiled after when > they are ask their source!
Yes, if you wipe the sourcePointer, there is no way how you can get a source code of method. > > I must be wrong, because the dev image when it is build, it calls all > cleanUp methods for classes, so CompiledMethod class >> cleanUp shuld have > been called, but if I take the Pharo1.3 result, I can see the source code > (not decompiled) > But you can't see the source of those methods in browser, because browser works only with installed methods while cleanup touching only non-installed ones. >> >> When i do this, my image hangs. > > I have just tried and it crash!!! Actually, I evaluated CompiledMethod > cleanUp. And just after cmd+b in CompiledMethod (to browse it) -> crash > How it is possilbe it didn't crash while building the dev image? or the > first time I browse a class? > maybe this incorrect CM are created by the build process just after the > cleanUp ? > I don't know yet. Maybe there is some test, which breaking them when it runs? Or tests are not run on those images? > >> >> Now i thinking that it should actually use empty trailer for those >> methods i.e. CompiledMethodTrailer empty.. >> >> Still i found it strange why some methods has broken bytecode. > > Yes!! and why they are not GCed!! > >> >> My theory is that some nasty code somewhere copied a compiled methods >> using some unsafe technique, like: >> >> 1 to: oldMethod size do: [ :i | newMethod at: i put: (oldMethod at: i) ] > > I will search to see if I find something. > The thing is that it is reproducible. Each new dev image build from scratch > in a core, has these guys. > >> >> Because when you constructing compiled method normally (by compiling >> them) , there is no way how you can get broken compiled methods. (we >> would discover it much much earlier, > > yes, exactly. > >> >> and in fact CompiledMethodTrailers are working for more than a year in >> both pharo and squeak, and there was no any issues like this from >> their side). >> > > +1 > >> >> -- >> Best regards, >> Igor Stasenko AKA sig. >> > > > > -- > Mariano > http://marianopeck.wordpress.com > > -- Best regards, Igor Stasenko AKA sig.
