On 24.10.2014, at 20:49, Eliot Miranda <eliot.miranda@gmail.com> wrote:Hi Max,On Fri, Oct 24, 2014 at 7:29 AM, Max Leske <maxleske@gmail.com> wrote:
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.I'm interested in taking a look at that image... (and I'm relieved you saw it on both the Cog and the Interpreter VMs ;-) )
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--
best,Eliot