[squeak-dev] Trunk test status

Bert Freudenberg bert at freudenbergs.de
Fri Jul 27 17:11:59 UTC 2012


On 27.07.2012, at 05:18, Nicolas Cellier wrote:

> 2012/7/27 Frank Shearar <frank.shearar at gmail.com>:
>> On 26 July 2012 22:35, Eliot Miranda <eliot.miranda at gmail.com> wrote:
>>> 
>>> 
>>> On Thu, Jul 26, 2012 at 3:59 AM, Levente Uzonyi <leves at elte.hu> wrote:
>>>> 
>>>> On Thu, 26 Jul 2012, Frank Shearar wrote:
>>>> 
>>>>> In a freshly updated trunk we have 3184 out of 3157 tests passing. We
>>>>> have 16 expected failures, and 11 failures, the latter being:
>>>>> * BecomeTest>>#testBecomeIdentityHash
>>>> 
>>>> 
>>>> This is failing due to a VM bug. There's a fix for it somewhere, but it
>>>> seems like it's not integrated into Cog yet. Explore this to see that two
>>>> consecutive objects share the same identityHash:
>>>> 
>>>> Array new: 10 streamContents: [ :stream |
>>>>        1 to: 10 do: [ :e | stream nextPut: Object new identityHash ] ]
>>> 
>>> 
>>> IMO this isn't a bug.  The identity hash changes at least every other
>>> object.  Hashes don't have to be unique.  But they do have to be
>>> well-distributed.  With 12 bits of identityHash Cog does fine basing its
>>> identityHash on the allocation pointer.  The above will wrap around after
>>> 8192 allocations, and provide 4096 distinct hashes (the maximum available).
>>> So the test needs rewriting to be more statistical.  The rationale for this
>>> is to speed up allocation.  Instead of a read-modify-write cycle to turn the
>>> crank of a pseudo-random generator there's a masking of the allocation
>>> pointer, which has to be read anyway to allocate an object.  BTW, the
>>> *right* way to implement this is to lazily allocate hashes, but for that
>>> there needs to be a flag (e.g. an identityHash of 0) to mark an object as
>>> not yet having a hash but existing Squeak images (because of the old
>>> definition) use 0 as a valid hash, so lazy hashes requires either a header
>>> bit (not enough of those) or an image change (which is my plan, as part of
>>> the new object representation).
>> 
>> If it's not a bug, let's nuke the test. We need to get to a position
>> where we have a green light.
>> 
>> frank
>> 
> 
> If I understood Eliot correctly, it would suffice to keep a pointer
> alive to the created objects...
> 
> preserveObjectsFromGarbageCollection := IdentitySet new.
> Array new: 10 streamContents: [ :stream |
>         1 to: 10 do: [ :e | stream nextPut:
> (preserveObjectsFromGarbageCollection add: Object new) identityHash ]
> ]
> 
> Nicolas


Makes no difference. GC does not happen after each allocation. Here's one that would work with Cog because each allocation is larger:

(1 to: 10) collect: [ :e | (Array new: 4) identityHash ]

But as Eliot said the test is somewhat meaningless in its current form. 

- Bert -




More information about the Squeak-dev mailing list