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 <mailto: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 ;-) )
Cool! Iâll send you a private message with a link to the image.
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