Hi
I have a rather strange problem with rehasing that occurred simultaneously multiple times on the same day but not since. Luckily I���ve saved an image with the debugger in it. The mean thing is: that doesn���t help me at all because from what I can tell either the Debugger is broken or there���s a VM problem.
Note:
The image is a Pharo 1.3 image. The problem occurred on two different VMs independently, an NBCog VM (Croquet Closure Cog VM [CoInterpreter VMMaker-oscog-EstebanLorenzano.166] 21.0) and a Squeak VM (Squeak3.10.2 of '5 June 2008' [latest update: #7179]).
The operation during which this happened was the loading of an ImageSegment (in both instances).
Here���s what happened. I got a SubscriptOutOfBounds error during rehashing of a Dictionary. When I look at the debugger it���s clear why the exception got signaled but not how that situation could ever happen.
These are the top three contexts on the stack:
Array(Object)>>errorSubscriptBounds:
Array(Object)>>at:put:
CBConfiguration(Dictionary)>>noCheckAdd:
This is the #noCheckAdd: method���
noCheckAdd: anObject
�� �� �� �� "Must be defined separately for Dictionary because (self findElementOrNil:) expects a key, not an association.�� 9/7/96 tk"
�� �� �� �� array at: (self findElementOrNil: anObject key) put: anObject.
�� �� �� �� tally := tally + 1
and here���s #at:put: where the exception is signaled:
at: index put: value
�� �� �� �� <primitive: 61>
�� �� �� �� index isInteger ifTrue:
�� �� �� �� �� �� �� �� [self class isVariable
�� �� �� �� �� �� �� �� �� �� �� �� ifTrue: [(index >= 1 and: [index <= self size])
�� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ifTrue: [self errorImproperStore]
�� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ifFalse: [self errorSubscriptBounds: index]] <��������� signaled
�� �� �� �� �� �� �� �� �� �� �� �� ifFalse: [self errorNotIndexable]].
�� �� �� �� index isNumber
�� �� �� �� �� �� �� �� ifTrue: [^self at: index asInteger put: value]
�� �� �� �� �� �� �� �� ifFalse: [self errorNonIntegerIndex]
Here���s the weird thing: according to the debugger ���array' in #noCheckAdd: IS NOT THE SAME INSTANCE as ���self��� in #at:put:!!!!!! ????????? When I look at the pointers to both arrays, the correct one is pointed to by the dictionary while the other is only being referenced by the exception context:
Bad array:
1: SubscriptOutOfBounds: 88
2: Array(Object)>>errorSubscriptBounds:
3: Array(Object>>at:put:
4: an Inspector
���
Good array:
1: aCBConfiguration(size 107)
I really have no clue how this could have happened. I���d appreciate any thoughts you might have���
Cheers,
Max