[squeak-dev] DictionaryIntegrityTest >> #testDictionaries failure
Levente Uzonyi
leves at elte.hu
Fri May 24 14:20:39 UTC 2013
On Thu, 23 May 2013, Frank Shearar wrote:
> On 14 May 2013 21:41, Levente Uzonyi <leves at elte.hu> wrote:
>>
>> By chasing the pointers I found that some associations are stored in the
>> Environment's exports variable's namespace variable. That is the
>> IdentityDictionary which breaks during renaming, because it holds on the
>> same association.
>
> The test failure is also intermittent. Does that observation fit the hypothesis?
This is a bit more than a hypothesis, but yes, HashedCollections "heal"
themselves when they grow, shrink, get rehashed, or when the elements
change rapidly.
I think the best solution to the problem is to change the way bindings are
handled. Currently bindings are used as associations in various
dictionaries, so changing their key has effect on other dictionaries. If
the bindings were the values of the dictionary and the bindings' keys were
the keys, then changing the binding would not break the dictionary itself.
This alone doesn't fix the problems in Environments, where the same
bindings are stored in multiple dictionaries. Here's a snippet to find a
binding which is present in all dictionaries in an environment:
| environment exportsNamespace importsNamespace contents bindings |
environment := Smalltalk globals.
exportsNamespace := (environment instVarNamed: #exports) instVarNamed:
#namespace.
importsNamespace := (environment instVarNamed: #imports) instVarNamed:
#namespace.
contents := environment instVarNamed: #contents.
bindings := environment instVarNamed: #bindings.
exportsNamespace associations detect: [ :each |
(importsNamespace associationAt: each key ifAbsent: [ nil ]) == each
and: [ (contents associationAt: each key ifAbsent: [ nil ]) == each
and: [ (bindings associationAt: each key ifAbsent: [ nil ]) == each ] ] ].
In my image it returns: #MCReorganizationPreloader=>MCReorganizationPreloader
Levente
>
> frank
>
>> Levente
>>
>>
>>>
>>>
>>> Levente
>>>
>>>>
>>>> frank
>>>>
>>>>> Levente
>>>>>
>>>>>
>>>>>>
>>>>>> On Sun, May 12, 2013 at 6:30 AM, Frank Shearar
>>>>>> <frank.shearar at gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>> This test fails because, as far as I can tell, SystemChangeFileTest >>
>>>>>>> #testClassRenamed breaks the integrity of an IdentityDictionary.
>>>>>>>
>>>>>>> This IdentityDictionary (call it dict) reports having a key in
>>>>>>> #keysAndValuesDo: such that dict at: key raises a KeyNotFound.
>>>>>>>
>>>>>>> Inspecting dict verifies this weirdness, even though you can see the
>>>>>>> key in the inspector's right hand pane.
>>>>>>>
>>>>>>> Ideas?
>>>>>>>
>>>>>>> The diff in the manifests between the last version where this test
>>>>>>> didn't fail and where it did looks like this:
>>>>>>>
>>>>>>> $ diff /home/frank/Downloads/TrunkImage.313.manifest
>>>>>>> /home/frank/Downloads/TrunkImage.314.manifest
>>>>>>> 22c22
>>>>>>> < Monticello (bf.541)
>>>>>>> ---
>>>>>>>>
>>>>>>>>
>>>>>>>> Monticello (bf.542)
>>>>>>>
>>>>>>>
>>>>>>> 26c26
>>>>>>> < MorphicTests (ar.18)
>>>>>>> ---
>>>>>>>>
>>>>>>>>
>>>>>>>> MorphicTests (fbs.20)
>>>>>>>
>>>>>>>
>>>>>>> 49c49
>>>>>>> < Tests (fbs.207)
>>>>>>> ---
>>>>>>>>
>>>>>>>>
>>>>>>>> * Tests (fbs.212)
>>>>>>>
>>>>>>>
>>>>>>> 62,63d61
>>>>>>>
>>>>>>> Not terribly enlightening...
>>>>>>>
>>>>>>> frank
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>
>
More information about the Squeak-dev
mailing list
|