> On 24.10.2014, at 20:49, Eliot Miranda <[email protected]> wrote: > > Hi Max, > > On Fri, Oct 24, 2014 at 7:29 AM, Max Leske <[email protected] > <mailto:[email protected]>> 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
