On Wed, Dec 23, 2009 at 2:16 PM, St�phane Ducasse <stephane.ducasse@inria.fr> wrote:
> Hi folks: �I am trying to understand ImageSegment methods like activeClasses, swapOutInactiveClasses, discoverActiveClasses among others. One of the comments of those methods says:
>
> "NOTE: �discoverActiveClasses uses Squeak's ability to detect and recover from faults due to a nil method dictionary. �It staches the method dict in with the organization during the time when discovery is in progress (Gag me with a spoon). �This is why the faults need to be cleared promptly before resuming normal work with the system. �It is also important that classes *do not* refer directly to their method dictionary, but only via the accessor message."
>
> So, it seems to HACK (it forces a fault) this MD fault recover to discover inactive classes and other things. Ok, forget that hack for a moment.
>
> What questions is, what are these faults? �Why a method dictionary can be in nil ? How is this produced ? And how is it fixed?
>
> I saw for example this:
>
> Behaviour>>methodDict
> � � methodDict == nil ifTrue: [self recoverFromMDFaultWithTrace].
> � � ^ methodDict
>
>
> But again...how can that be nil ???

VM code put it to nil.
The idea is that the methodDict is stored in the class or method cat
and nil is put in place of the methodDict.

Then when the VM detects that the methodDict is nil then it copies the methodDict stored into the category
This way you know which class has been used during your interaction.

We tried to use it with mathieu but we often got all the classes back on place.
And it crashed a lot :)


Thanks Stef. After a discussion with Andreas in Squeak-dev mailing list, I wanted to ask you too.

I could perfectly saw that when trying to discover used classes. I also saw the method ClassDescription>> induceMDFault.

However, I still have this question:

Forget about discovering classes, could be possible that for a certain situation the VM puts a nil to a method directory or always that happens this is done with that intention, through the message induceMDFault ?�� If it is always through induceMDFault�� the only sender is to discover used classes with ImageSegment.� So...it is used ONLY in that?

The possibility of using #instVarAt:put: accidentally is rejected because the recover will search the methodDict in the category (organization). So, if I just set a nil to the methodDict using #instVarAt:put:� but I don't "backup" the methodDic in the category, the recover won't work.

thanks

Mariano

ps: yes, I am thinking in clean up all this class discovery to another place than ImageSegment what I wonder if those messages for MD faults should be put off too.

Stef

>
> Thank you very much.
>
> Marian
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project@lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project