<div dir="ltr"><div><div><div>Thank you Henrik,<br></div>I will wait to a new stable version as the problem does not affect too much my workflow.<br></div>Cheers,<br><br></div>Hernán<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">2016-09-21 6:03 GMT-03:00 Henrik Johansen <span dir="ltr">&lt;<a href="mailto:henrik.s.johansen@veloxit.no" target="_blank">henrik.s.johansen@veloxit.no</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> <br>Yes, you need a new VM built from Cog sources after June, hopefully a newer can be promoted to stable soon...<br>
<br>
<a href="https://pharo.fogbugz.com/f/cases/18711/Cannot-commit-a-special-character-into-Monticello" rel="noreferrer" target="_blank">https://pharo.fogbugz.com/f/<wbr>cases/18711/Cannot-commit-a-<wbr>special-character-into-<wbr>Monticello</a><br>
<br>
Cheers,<br>
Henry<br>
<br>
<br>
<br>
&gt; On 21 Sep 2016, at 7:19 , Hernán Morales Durand &lt;<a href="mailto:hernan.morales@gmail.com">hernan.morales@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; Hi<br>
&gt;<br>
&gt; I don&#39;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.<br>
&gt;<br>
&gt; 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).<br>
&gt;<br>
&gt; Gofer it<br>
&gt;     smalltalkhubUser: &#39;hernan&#39; project: &#39;Territorial&#39;;<br>
&gt;     configuration;<br>
&gt;     loadDevelopment.<br>
&gt; TCityOrganization addOpenGeoCode<br>
&gt;<br>
&gt; Then manually install Territorial-<wbr>HernanMoralesDurand.163 from Monticello. Backwards (installing .163, populating, then .166) also reproduces the issue.<br>
&gt;<br>
&gt; Is there a fix for this?<br>
&gt;<br>
&gt; --- The full stack ---<br>
&gt; Array(Object)&gt;&gt;<wbr>primitiveFailed:<br>
&gt; Array(Object)&gt;&gt;primitiveFailed<br>
&gt; Array&gt;&gt;<wbr>elementsForwardIdentityTo:<br>
&gt; TerritorialCity class(ClassDescription)&gt;&gt;<wbr>updateInstances:from:isMeta:<br>
&gt; TerritorialCity class(ClassDescription)&gt;&gt;<wbr>updateInstancesFrom:<br>
&gt; PharoClassInstaller&gt;&gt;<wbr>updateClass:to:<br>
&gt; [ 1 to: old size do: [ :index | self updateClass: (old at: index) to: (new at: index) ].<br>
&gt; old elementsForwardIdentityTo: new.<br>
&gt; &quot; Garbage collect away the zombie instances left behind in garbage memory in #updateInstancesFrom: &quot;<br>
&gt; &quot; If we don&#39;t clean up this garbage, a second update would revive them with a wrong layout! &quot;<br>
&gt; &quot; (newClass rather than oldClass, since they are now both newClass) &quot;<br>
&gt; Smalltalk garbageCollect ] in PharoClassInstaller&gt;&gt;<wbr>migrateClasses:to:using:<br>
&gt; BlockClosure&gt;&gt;ensure:<br>
&gt; BlockClosure&gt;&gt;<wbr>valueUnpreemptively<br>
&gt; PharoClassInstaller&gt;&gt;<wbr>migrateClasses:to:using:<br>
&gt; SlotClassBuilder&gt;&gt;<wbr>migrateClasses:<br>
&gt; SlotClassBuilder&gt;&gt;apply:<br>
&gt; SlotClassBuilder&gt;&gt;build<br>
&gt; PharoClassInstaller class(AbstractClassInstaller class)&gt;&gt;make:<br>
&gt; [ PharoClassInstaller<br>
&gt;     make: [ :builder |<br>
&gt;         builder<br>
&gt;             superclass: superClass;<br>
&gt;             name: name;<br>
&gt;             layoutClass: (ObjectLayout layoutForType: type);<br>
&gt;             slots: self instanceVariables;<br>
&gt;             sharedVariables: self classVariables;<br>
&gt;             sharedPools: self sharedPoolsString;<br>
&gt;             classSlots: self classInstanceVariables;<br>
&gt;             traitComposition: self traitCompositionCompiled;<br>
&gt;             classTraitComposition: self classTraitCompositionCompiled;<br>
&gt;             comment: comment stamp: commentStamp;<br>
&gt;             category: category;<br>
&gt;             environment: superClass environment ] ] in MCClassDefinition&gt;&gt;createClass<br>
&gt; BlockClosure&gt;&gt;on:do:<br>
&gt; MCClassDefinition&gt;&gt;createClass<br>
&gt; MCClassDefinition&gt;&gt;load<br>
&gt; MCClassDefinition(<wbr>MCDefinition)&gt;&gt;<wbr>addMethodAdditionTo:<br>
&gt; [ :each | each addMethodAdditionTo: methodAdditions ] in MCPackageLoader&gt;&gt;<wbr>basicLoadDefinitions<br>
&gt; [ :each |<br>
&gt; | newLabel |<br>
&gt; &quot;Special handling for first and last element&quot;<br>
&gt; (count = 0<br>
&gt;     or: [ count + 1 = size<br>
&gt;             or: [ (Time millisecondsSince: lastUpdate) &gt;= msecs ] ])<br>
&gt;     ifTrue: [ bar current: count.<br>
&gt;         oldLabel = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])<br>
&gt;             ifFalse: [ bar label: newLabel.<br>
&gt;                 oldLabel := newLabel ].<br>
&gt;         lastUpdate := Time millisecondClockValue ].<br>
&gt; aBlock value: each.<br>
&gt; count := count + 1 ] in [ :bar |<br>
&gt; labelBlock := aStringOrBlock isString<br>
&gt;     ifTrue: [ bar label: aStringOrBlock.<br>
&gt;         [ :dummyItem | aStringOrBlock ] ]<br>
&gt;     ifFalse: [ aStringOrBlock ].<br>
&gt; self<br>
&gt;     do: [ :each |<br>
&gt;         | newLabel |<br>
&gt;         &quot;Special handling for first and last element&quot;<br>
&gt;         (count = 0<br>
&gt;             or: [ count + 1 = size<br>
&gt;                     or: [ (Time millisecondsSince: lastUpdate) &gt;= msecs ] ])<br>
&gt;             ifTrue: [ bar current: count.<br>
&gt;                 oldLabel<br>
&gt;                     = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])<br>
&gt;                     ifFalse: [ bar label: newLabel.<br>
&gt;                         oldLabel := newLabel ].<br>
&gt;                 lastUpdate := Time millisecondClockValue ].<br>
&gt;         aBlock value: each.<br>
&gt;         count := count + 1 ] ] in OrderedCollection(Collection)&gt;<wbr>&gt;do:displayingProgress:every:<br>
&gt; OrderedCollection&gt;&gt;do:<br>
&gt; [ :bar |<br>
&gt; labelBlock := aStringOrBlock isString<br>
&gt;     ifTrue: [ bar label: aStringOrBlock.<br>
&gt;         [ :dummyItem | aStringOrBlock ] ]<br>
&gt;     ifFalse: [ aStringOrBlock ].<br>
&gt; self<br>
&gt;     do: [ :each |<br>
&gt;         | newLabel |<br>
&gt;         &quot;Special handling for first and last element&quot;<br>
&gt;         (count = 0<br>
&gt;             or: [ count + 1 = size<br>
&gt;                     or: [ (Time millisecondsSince: lastUpdate) &gt;= msecs ] ])<br>
&gt;             ifTrue: [ bar current: count.<br>
&gt;                 oldLabel<br>
&gt;                     = (newLabel := (labelBlock cull: each) ifNil: [ oldLabel ])<br>
&gt;                     ifFalse: [ bar label: newLabel.<br>
&gt;                         oldLabel := newLabel ].<br>
&gt;                 lastUpdate := Time millisecondClockValue ].<br>
&gt;         aBlock value: each.<br>
&gt;         count := count + 1 ] ] in OrderedCollection(Collection)&gt;<wbr>&gt;do:displayingProgress:every:<br>
&gt; BlockClosure&gt;&gt;cull:<br>
&gt; [ ^ block cull: self ] in [ self prepareForRunning.<br>
&gt; CurrentJob value: self during: [ ^ block cull: self ] ] in Job&gt;&gt;run<br>
&gt; [ p psValueAt: index put: anObject.<br>
&gt; aBlock value ] in CurrentJob(DynamicVariable)&gt;&gt;<wbr>value:during:<br>
&gt; BlockClosure&gt;&gt;ensure:<br>
&gt; CurrentJob(DynamicVariable)&gt;&gt;<wbr>value:during:<br>
&gt; CurrentJob class(DynamicVariable class)&gt;&gt;value:during:<br>
&gt; [ self prepareForRunning.<br>
&gt; CurrentJob value: self during: [ ^ block cull: self ] ] in Job&gt;&gt;run<br>
&gt; BlockClosure&gt;&gt;ensure:<br>
&gt; Job&gt;&gt;run<br>
&gt; MorphicUIManager(UIManager)&gt;&gt;<wbr>displayProgress:from:to:<wbr>during:<br>
&gt; ByteString(String)&gt;&gt;<wbr>displayProgressFrom:to:during:<br>
&gt; OrderedCollection(Collection)&gt;<wbr>&gt;do:displayingProgress:every:<br>
&gt; OrderedCollection(Collection)&gt;<wbr>&gt;do:displayingProgress:<br>
&gt; MCPackageLoader&gt;&gt;<wbr>basicLoadDefinitions<br>
&gt; [ self basicLoadDefinitions ] in [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader&gt;&gt;basicLoad<br>
&gt; BlockClosure&gt;&gt;on:do:<br>
&gt;  - - - - - - - - - - - - - - -<br>
&gt;             - - - - - - - - - - - - - - - - - -<br>
&gt; [ aBlock<br>
&gt;     on: InMidstOfFileinNotification<br>
&gt;     do: [ :notification | notification resume: true ] ] in MCPackageLoader&gt;&gt;<wbr>handleLoadErrorsDuring:<br>
&gt; BlockClosure&gt;&gt;on:do:<br>
&gt; MCPackageLoader&gt;&gt;<wbr>handleLoadErrorsDuring:<br>
&gt; [ self handleLoadErrorsDuring: [ self basicLoadDefinitions ] ] in MCPackageLoader&gt;&gt;basicLoad<br>
&gt; BlockClosure&gt;&gt;ensure:<br>
&gt; MCPackageLoader&gt;&gt;basicLoad<br>
&gt; [ self basicLoad ] in MCPackageLoader&gt;&gt;<wbr>loadWithNameLike:<br>
&gt; BlockClosure&gt;&gt;ensure:<br>
&gt; MCPackageLoader&gt;&gt;<wbr>useChangeSetNamed:during:<br>
&gt; MCPackageLoader&gt;&gt;<wbr>useNewChangeSetNamedLike:<wbr>during:<br>
&gt; MCPackageLoader&gt;&gt;<wbr>loadWithNameLike:<br>
&gt; MCThreeWayMerger(MCMerger)&gt;&gt;<wbr>loadWithNameLike:<br>
&gt; MCVersionMerger&gt;&gt;<wbr>mergeWithNameLike:<br>
&gt; MCVersionMerger class&gt;&gt;mergeVersion:<br>
&gt; MCVersion&gt;&gt;merge<br>
&gt; MCFileRepositoryInspector(<wbr>MCVersionInspector)&gt;&gt;merge<br>
&gt; MCFileRepositoryInspector&gt;&gt;<wbr>merge<br>
&gt; MCFileRepositoryInspector(<wbr>MCTool)&gt;&gt;performButtonAction:<wbr>enabled:<br>
&gt; PluggableButtonMorph&gt;&gt;<wbr>performAction:<br>
&gt; [ :m |<br>
&gt; (m containsPoint: evt cursorPoint)<br>
&gt;     ifTrue: [ m enabled<br>
&gt;             ifTrue: [ m performAction: evt ] ] ] in PluggableButtonMorph&gt;&gt;mouseUp:<br>
&gt; Array(SequenceableCollection)&gt;<wbr>&gt;do:<br>
&gt; PluggableButtonMorph&gt;&gt;mouseUp:<br>
&gt; PluggableButtonMorph(Morph)&gt;&gt;<wbr>handleMouseUp:<br>
&gt; MouseButtonEvent&gt;&gt;sentTo:<br>
&gt; PluggableButtonMorph(Morph)&gt;&gt;<wbr>handleEvent:<br>
&gt; PluggableButtonMorph(Morph)&gt;&gt;<wbr>handleFocusEvent:<br>
&gt; [ ActiveHand := self.<br>
&gt; ActiveEvent := anEvent.<br>
&gt; result := focusHolder<br>
&gt;     handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph&gt;&gt;sendFocusEvent:to:<wbr>clear:<br>
&gt; BlockClosure&gt;&gt;on:do:<br>
&gt; WorldMorph(PasteUpMorph)&gt;&gt;<wbr>becomeActiveDuring:<br>
&gt; HandMorph&gt;&gt;sendFocusEvent:to:<wbr>clear:<br>
&gt; HandMorph&gt;&gt;sendEvent:focus:<wbr>clear:<br>
&gt; HandMorph&gt;&gt;sendMouseEvent:<br>
&gt; HandMorph&gt;&gt;handleEvent:<br>
&gt; HandMorph&gt;&gt;processEvents<br>
&gt; [ :h |<br>
&gt; ActiveHand := h.<br>
&gt; h processEvents.<br>
&gt; ActiveHand := nil ] in WorldState&gt;&gt;doOneCycleNowFor:<br>
&gt; Array(SequenceableCollection)&gt;<wbr>&gt;do:<br>
&gt; WorldState&gt;&gt;handsDo:<br>
&gt; WorldState&gt;&gt;doOneCycleNowFor:<br>
&gt; WorldState&gt;&gt;doOneCycleFor:<br>
&gt; WorldMorph&gt;&gt;doOneCycle<br>
&gt; [ [ World doOneCycle.<br>
&gt; Processor yield.<br>
&gt; false ] whileFalse: [  ] ] in MorphicUIManager&gt;&gt;<wbr>spawnNewProcess<br>
&gt; [ self value.<br>
&gt; Processor terminateActive ] in BlockClosure&gt;&gt;newProcess<br>
&gt; ------------------------------<wbr>------------------------------<wbr>-------------------<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Hernán<br>
&gt;<br>
<br>
<br></blockquote></div><br></div>