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

Reply via email to