I'm pretty sure the array inst var of your WeakOrderedColleciton is no more a WeakArray but a simple Array. This is because Pharo's WeakOrderedCollection is broken... Every reference to Array from within OrderedCollection should be replaced with message send (self arrayType). See for example, OrderedCollection>>#grow Nicolas 2011/8/3 Mariano Martinez Peck <marianopeck@gmail.com>:
Hi guys. I am since yesterday trying to find something and I cannot. So at this point I need external eyes :) I have this little code:
   anObject := ClassWith2Var new.    sharedObject := ClassWith1Var new.    sharedObject var1: 'nose'.    anObject var1: Date today.    anObject var2: sharedObject.
   serializedObjects := FuelMareaSerializer new serializeAndWriteObject: anObject to: 'aFileName'.    anObject := nil.    sharedObject := nil.
   3 timesRepeat: [Smalltalk garbageCollect].    serializedObjects inspect.
What is important here is that FuelMareaSerializer new serializeAndWriteObject: anObject to: 'aFileName' answers a WeakOrderedCollection with each object of the serialized graph (taking anObject as the root) Now, if I print the tempVar serializedObjects I see:
a WeakOrderedCollection(ClassWith1Var ClassWith2Var Date DateAndTime Duration a ClassWith1Var a ClassWith2Var 3 August 2011 2011-08-03T00:00:00+02:00 0:02:00:00 1:00:00:00 86400 2455777 'nose' 0 7200)
WHYYYY?? why are all there if I put a nil to both, anObject and sharedObejct. This WeakOrderedCollection should be with all nils (except classes). Why are not being garbage collected?
If I explore, for example the tempVar sharedObejct, which is at serializedObjects at: 6Â Â and then I put explore pointers I ONLY see the array of the WeakOrderedCollection pointing to it. I don't understand.
Any help is really appreaciated.
-- Mariano http://marianopeck.wordpress.com