[Vm-dev] PrimitiveFailed: primitive #elementsForwardIdentityTo: in Array failed

Hernán Morales Durand hernan.morales at gmail.com
Wed Sep 21 17:14:13 UTC 2016


Thank you Henrik,
I will wait to a new stable version as the problem does not affect too much
my workflow.
Cheers,

Hernán


2016-09-21 6:03 GMT-03:00 Henrik Johansen <henrik.s.johansen at veloxit.no>:

>
> Yes, you need a new VM built from Cog sources after June, hopefully a
> newer can be promoted to stable soon...
>
> https://pharo.fogbugz.com/f/cases/18711/Cannot-commit-a-
> special-character-into-Monticello
>
> Cheers,
> Henry
>
>
>
> > On 21 Sep 2016, at 7:19 , Hernán Morales Durand <
> hernan.morales at gmail.com> wrote:
> >
> > Hi
> >
> > I don't know if this was reported. Apparently there is a problem when
> migrating a large number of instances, I have aprox. 270,000 instances from
> which I simply pulled up an ivar in their class to a higher superclass, and
> a PrimitiveFailed raised.
> >
> > It can be reproduced by installing Territorial in Pharo 5.0 with Spur VM
> 5.0 from 4 May 2016 in Windows 8.1 (this is the standard image installed
> using wget command line in msys).
> >
> > Gofer it
> >     smalltalkhubUser: 'hernan' project: 'Territorial';
> >     configuration;
> >     loadDevelopment.
> > TCityOrganization addOpenGeoCode
> >
> > Then manually install Territorial-HernanMoralesDurand.163 from
> Monticello. Backwards (installing .163, populating, then .166) also
> reproduces the issue.
> >
> > Is there a fix for this?
> >
> > --- The full stack ---
> > Array(Object)>>primitiveFailed:
> > Array(Object)>>primitiveFailed
> > Array>>elementsForwardIdentityTo:
> > TerritorialCity class(ClassDescription)>>updateInstances:from:isMeta:
> > TerritorialCity class(ClassDescription)>>updateInstancesFrom:
> > PharoClassInstaller>>updateClass:to:
> > [ 1 to: old size do: [ :index | self updateClass: (old at: index) to:
> (new at: index) ].
> > old elementsForwardIdentityTo: new.
> > " Garbage collect away the zombie instances left behind in garbage
> memory in #updateInstancesFrom: "
> > " If we don't clean up this garbage, a second update would revive them
> with a wrong layout! "
> > " (newClass rather than oldClass, since they are now both newClass) "
> > Smalltalk garbageCollect ] in PharoClassInstaller>>
> migrateClasses:to:using:
> > BlockClosure>>ensure:
> > BlockClosure>>valueUnpreemptively
> > PharoClassInstaller>>migrateClasses:to:using:
> > SlotClassBuilder>>migrateClasses:
> > SlotClassBuilder>>apply:
> > SlotClassBuilder>>build
> > PharoClassInstaller class(AbstractClassInstaller class)>>make:
> > [ PharoClassInstaller
> >     make: [ :builder |
> >         builder
> >             superclass: superClass;
> >             name: name;
> >             layoutClass: (ObjectLayout layoutForType: type);
> >             slots: self instanceVariables;
> >             sharedVariables: self classVariables;
> >             sharedPools: self sharedPoolsString;
> >             classSlots: self classInstanceVariables;
> >             traitComposition: self traitCompositionCompiled;
> >             classTraitComposition: self classTraitCompositionCompiled;
> >             comment: comment stamp: commentStamp;
> >             category: category;
> >             environment: superClass environment ] ] in
> MCClassDefinition>>createClass
> > BlockClosure>>on:do:
> > MCClassDefinition>>createClass
> > MCClassDefinition>>load
> > MCClassDefinition(MCDefinition)>>addMethodAdditionTo:
> > [ :each | each addMethodAdditionTo: methodAdditions ] in
> MCPackageLoader>>basicLoadDefinitions
> > [ :each |
> > | newLabel |
> > "Special handling for first and last element"
> > (count = 0
> >     or: [ count + 1 = size
> >             or: [ (Time millisecondsSince: lastUpdate) >= msecs ] ])
> >     ifTrue: [ bar current: count.
> >         oldLabel = (newLabel := (labelBlock cull: each) ifNil: [
> oldLabel ])
> >             ifFalse: [ bar label: newLabel.
> >                 oldLabel := newLabel ].
> >         lastUpdate := Time millisecondClockValue ].
> > aBlock value: each.
> > count := count + 1 ] in [ :bar |
> > labelBlock := aStringOrBlock isString
> >     ifTrue: [ bar label: aStringOrBlock.
> >         [ :dummyItem | aStringOrBlock ] ]
> >     ifFalse: [ aStringOrBlock ].
> > self
> >     do: [ :each |
> >         | newLabel |
> >         "Special handling for first and last element"
> >         (count = 0
> >             or: [ count + 1 = size
> >                     or: [ (Time millisecondsSince: lastUpdate) >= msecs
> ] ])
> >             ifTrue: [ bar current: count.
> >                 oldLabel
> >                     = (newLabel := (labelBlock cull: each) ifNil: [
> oldLabel ])
> >                     ifFalse: [ bar label: newLabel.
> >                         oldLabel := newLabel ].
> >                 lastUpdate := Time millisecondClockValue ].
> >         aBlock value: each.
> >         count := count + 1 ] ] in OrderedCollection(Collection)>
> >do:displayingProgress:every:
> > OrderedCollection>>do:
> > [ :bar |
> > labelBlock := aStringOrBlock isString
> >     ifTrue: [ bar label: aStringOrBlock.
> >         [ :dummyItem | aStringOrBlock ] ]
> >     ifFalse: [ aStringOrBlock ].
> > self
> >     do: [ :each |
> >         | newLabel |
> >         "Special handling for first and last element"
> >         (count = 0
> >             or: [ count + 1 = size
> >                     or: [ (Time millisecondsSince: lastUpdate) >= msecs
> ] ])
> >             ifTrue: [ bar current: count.
> >                 oldLabel
> >                     = (newLabel := (labelBlock cull: each) ifNil: [
> oldLabel ])
> >                     ifFalse: [ bar label: newLabel.
> >                         oldLabel := newLabel ].
> >                 lastUpdate := Time millisecondClockValue ].
> >         aBlock value: each.
> >         count := count + 1 ] ] in OrderedCollection(Collection)>
> >do:displayingProgress:every:
> > BlockClosure>>cull:
> > [ ^ block cull: self ] in [ self prepareForRunning.
> > CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
> > [ p psValueAt: index put: anObject.
> > aBlock value ] in CurrentJob(DynamicVariable)>>value:during:
> > BlockClosure>>ensure:
> > CurrentJob(DynamicVariable)>>value:during:
> > CurrentJob class(DynamicVariable class)>>value:during:
> > [ self prepareForRunning.
> > CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
> > BlockClosure>>ensure:
> > Job>>run
> > MorphicUIManager(UIManager)>>displayProgress:from:to:during:
> > ByteString(String)>>displayProgressFrom:to:during:
> > OrderedCollection(Collection)>>do:displayingProgress:every:
> > OrderedCollection(Collection)>>do:displayingProgress:
> > MCPackageLoader>>basicLoadDefinitions
> > [ self basicLoadDefinitions ] in [ self handleLoadErrorsDuring: [ self
> basicLoadDefinitions ] ] in MCPackageLoader>>basicLoad
> > BlockClosure>>on:do:
> >  - - - - - - - - - - - - - - -
> >             - - - - - - - - - - - - - - - - - -
> > [ aBlock
> >     on: InMidstOfFileinNotification
> >     do: [ :notification | notification resume: true ] ] in
> MCPackageLoader>>handleLoadErrorsDuring:
> > BlockClosure>>on:do:
> > MCPackageLoader>>handleLoadErrorsDuring:
> > [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in
> MCPackageLoader>>basicLoad
> > BlockClosure>>ensure:
> > MCPackageLoader>>basicLoad
> > [ self basicLoad ] in MCPackageLoader>>loadWithNameLike:
> > BlockClosure>>ensure:
> > MCPackageLoader>>useChangeSetNamed:during:
> > MCPackageLoader>>useNewChangeSetNamedLike:during:
> > MCPackageLoader>>loadWithNameLike:
> > MCThreeWayMerger(MCMerger)>>loadWithNameLike:
> > MCVersionMerger>>mergeWithNameLike:
> > MCVersionMerger class>>mergeVersion:
> > MCVersion>>merge
> > MCFileRepositoryInspector(MCVersionInspector)>>merge
> > MCFileRepositoryInspector>>merge
> > MCFileRepositoryInspector(MCTool)>>performButtonAction:enabled:
> > PluggableButtonMorph>>performAction:
> > [ :m |
> > (m containsPoint: evt cursorPoint)
> >     ifTrue: [ m enabled
> >             ifTrue: [ m performAction: evt ] ] ] in
> PluggableButtonMorph>>mouseUp:
> > Array(SequenceableCollection)>>do:
> > PluggableButtonMorph>>mouseUp:
> > PluggableButtonMorph(Morph)>>handleMouseUp:
> > MouseButtonEvent>>sentTo:
> > PluggableButtonMorph(Morph)>>handleEvent:
> > PluggableButtonMorph(Morph)>>handleFocusEvent:
> > [ ActiveHand := self.
> > ActiveEvent := anEvent.
> > result := focusHolder
> >     handleFocusEvent: (anEvent transformedBy: (focusHolder
> transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear:
> > BlockClosure>>on:do:
> > WorldMorph(PasteUpMorph)>>becomeActiveDuring:
> > HandMorph>>sendFocusEvent:to:clear:
> > HandMorph>>sendEvent:focus:clear:
> > HandMorph>>sendMouseEvent:
> > HandMorph>>handleEvent:
> > HandMorph>>processEvents
> > [ :h |
> > ActiveHand := h.
> > h processEvents.
> > ActiveHand := nil ] in WorldState>>doOneCycleNowFor:
> > Array(SequenceableCollection)>>do:
> > WorldState>>handsDo:
> > WorldState>>doOneCycleNowFor:
> > WorldState>>doOneCycleFor:
> > WorldMorph>>doOneCycle
> > [ [ World doOneCycle.
> > Processor yield.
> > false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
> > [ self value.
> > Processor terminateActive ] in BlockClosure>>newProcess
> > ------------------------------------------------------------
> -------------------
> >
> >
> >
> > Hernán
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160921/630ef0b6/attachment-0001.htm


More information about the Vm-dev mailing list