On Wed, Aug 3, 2011 at 10:47 PM, Igor Stasenko <[email protected]> wrote:
> On 3 August 2011 22:27, Stéphane Ducasse <[email protected]> > wrote: > > How can we test and make sure that in the future we know automatically if > the weak is broken? > > > > object := Object new. > > coll := WeakOrderedCollection new add: anObject. > anObject := nil. > Smalltalk garbageCollect. > self assert: coll removeLast isNil > That was not enought in this case. In fact, it was really difficult for me to find the bug, because it used to ONLY fail when sending #grow. (WeakOrderedCollection new instVarNamed: 'array') class ->>>> WeakArray (WeakOrderedCollection new grow instVarNamed: 'array') class ->>>> Array :) > :) > > > Stef > > > > On Aug 3, 2011, at 1:01 PM, Nicolas Cellier wrote: > > > >> You replace Array with self arrayType, that's all. > >> But there is better, Pharo already has growAtFirst and growAtLast > >> which are correct. > >> Use them instead of grow. > >> See SLICE in inbox. > >> > >> Nicolas > >> > >> 2011/8/3 Mariano Martinez Peck <[email protected]>: > >>> btw...how can I change OrderedCollection>>grow > >>> without shooting my foots? > >>> > >>> On Wed, Aug 3, 2011 at 12:51 PM, Mariano Martinez Peck > >>> <[email protected]> wrote: > >>>> > >>>> > >>>> On Wed, Aug 3, 2011 at 12:42 PM, Nicolas Cellier > >>>> <[email protected]> wrote: > >>>>> > >>>>> I'm pretty sure the array inst var of your WeakOrderedColleciton is > no > >>>>> more a WeakArray but a simple Array. > >>>> > >>>> Yes, indeed, it is a normal Array and that cought my attention. But > since > >>>> I have no idea about Weak stuff...I also noticed that > WeakOrderedCollection > >>>> is declared as: > >>>> > >>>> OrderedCollection subclass: #WeakOrderedCollection > >>>> instanceVariableNames: '' > >>>> classVariableNames: '' > >>>> poolDictionaries: '' > >>>> category: 'Collections-Weak' > >>>> > >>>> instead of using the #weakSubclass: ... message: > >>>> > >>>> OrderedCollection weakSubclass: #WeakOrderedCollection > >>>> instanceVariableNames: '' > >>>> classVariableNames: '' > >>>> poolDictionaries: '' > >>>> category: 'Collections-Weak' > >>>> > >>>> > >>>>> > >>>>> This is because Pharo's WeakOrderedCollection is broken... > >>>>> > >>>> > >>>> Do you know a weak collection that is not broken in Pharo and let me > do a > >>>> addLast: ? > >>>> > >>>>> > >>>>> Every reference to Array from within OrderedCollection should be > >>>>> replaced with message send (self arrayType). > >>>>> See for example, OrderedCollection>>#grow > >>>>> > >>>> > >>>> Thanks. I will check how many there are and try to fix them. > >>>> > >>>>> > >>>>> 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 > >>>>>> > >>>>>> > >>>>> > >>>> > >>>> > >>>> > >>>> -- > >>>> Mariano > >>>> http://marianopeck.wordpress.com > >>>> > >>> > >>> > >>> > >>> -- > >>> Mariano > >>> http://marianopeck.wordpress.com > >>> > >>> > >> > > > > > > > > > > -- > Best regards, > Igor Stasenko AKA sig. > > -- Mariano http://marianopeck.wordpress.com
