Ok, I have splitted the slice in two parts: PART1 and PART2. PART1 includes the fixes in #makeRoomAtFirst and #makeRoomAtLast and a new class WeakOrderedCollectionTest with two tests: #testWeakOrderedCollectionSomeGarbageCollected and #testWeakOrderedCollectionAllGarbageCollected.
Those tests can be improved a lot and make them look like those in WeakSetTest where each collection operation is tested. I don't have the time/knowledge to do that right now, but if someone can, excellent. The second part is just the revome of OrderedCollection >> grow. Name: SLICE-Issue-4596-WeakOrderedColllection-array-is-replaced-by-an-Array-instead-of-a-WeakArray-PART1-MarianoMartinezPeck.1 Author: MarianoMartinezPeck Time: 3 August 2011, 2:40:10 pm UUID: 35f20200-98ef-581f-1100-000044ef581f Ancestors: Dependencies: CollectionsTests-MarianoMartinezPeck.529, Collections-Sequenceable-MarianoMartinezPeck.97 This is the first part. It includes the fix and 2 tests. Name: SLICE-Issue-4596-WeakOrderedColllection-array-is-replaced-by-an-Array-instead-of-a-WeakArray-PART2-MarianoMartinezPeck.1 Author: MarianoMartinezPeck Time: 3 August 2011, 2:41:42 pm UUID: caf00200-1007-401f-18ec-0e0008e05c1f Ancestors: Dependencies: Collections-Sequenceable-MarianoMartinezPeck.98 It just removes OrderedCollection >> grow On Wed, Aug 3, 2011 at 2:11 PM, Mariano Martinez Peck <[email protected] > wrote: > Thanks a lot Nicolas and Henrik. I have split the slice and it works! > I will upload soon both slides, part1 and part2 and a test for it. > > On Wed, Aug 3, 2011 at 1:49 PM, Nicolas Cellier < > [email protected]> wrote: > >> Oh I see, for the SLICE, this is again the Pharo's version of >> MCPackageLoader>>basicLoad which is striking. >> In Squeak trunk it would work because removals are performed AFTER >> methodAdditions/Changes. >> In Pharo, removals are performed BEFORE, so yes, the SLICE needs to be >> split in two parts... >> Or you can just manually merge it (apply the removal after...). >> >> I'm eager to see a true atomic load with a single massive becomeForward: >> :) >> IMHO, this should be coupled with lazy initializations mechanism as I >> proposed once (based on pragmas). >> >> Now if you simply modify grow from within a browser, I see no obvious >> reason why it would fail... >> >> Nicolas >> >> 2011/8/3 Mariano Martinez Peck <[email protected]>: >> > >> > >> > On Wed, Aug 3, 2011 at 1:01 PM, Nicolas Cellier >> > <[email protected]> wrote: >> >> >> >> You replace Array with self arrayType, that's all. >> > >> > Here my images freezes and CPU goes 100%. I guess because >> compiling/saving a >> > method uses OrderedCollection grow at the same time. >> > >> >> >> >> But there is better, Pharo already has growAtFirst and growAtLast >> >> which are correct. >> >> Use them instead of grow. >> >> See SLICE in inbox. >> > >> > I cannot load it since it freezes in "Cleaning Up". It can be the same >> > reason as why I cannot save the modification. >> > I am in Pharo1.3 >> > Latest update: #13277 >> > >> > Thanks a lot for the help! >> > >> >> >> >> 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 >> >> > >> >> > >> >> >> > >> > >> > >> > -- >> > Mariano >> > http://marianopeck.wordpress.com >> > >> > >> >> > > > -- > Mariano > http://marianopeck.wordpress.com > > -- Mariano http://marianopeck.wordpress.com
