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 <[email protected]>: > 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 > >
