On Wed, Aug 3, 2011 at 10:47 PM, Igor Stasenko <siguctua@gmail.com> wrote:
On 3 August 2011 22:27, St�phane Ducasse <stephane.ducasse@inria.fr> 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 <marianopeck@gmail.com>:
>>> btw...how can I change OrderedCollection>>grow
>>> without shooting my foots?
>>>
>>> On Wed, Aug 3, 2011 at 12:51 PM, Mariano Martinez Peck
>>> <marianopeck@gmail.com> wrote:
>>>>
>>>>
>>>> On Wed, Aug 3, 2011 at 12:42 PM, Nicolas Cellier
>>>> <nicolas.cellier.aka.nice@gmail.com> 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 <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
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Mariano
>>>> http://marianopeck.wordpress.com
>>>>
>>>
>>>
>>>
>>> --
>>> Mariano
>>> http://marianopeck.wordpress.com
>>>
>>>
>>
>
>
>



--
Best regards,
Igor Stasenko AKA sig.




--
Mariano
http://marianopeck.wordpress.com