Frank Shearar uploaded a new version of Graphics to project The Trunk:
http://source.squeak.org/trunk/Graphics-fbs.209.mcz ==================== Summary ==================== Name: Graphics-fbs.209 Author: fbs Time: 23 April 2013, 9:50:00.413 am UUID: 4dd577f2-2a70-4e21-8efa-5847b3ad804c Ancestors: Graphics-tpr.208 #asGrafPort belongs in the Morphic package. =============== Diff against Graphics-tpr.208 =============== Item was removed: - ----- Method: BitBlt class>>asGrafPort (in category 'instance creation') ----- - asGrafPort - "Return the GrafPort associated with the receiver" - ^GrafPort! |
On 23 April 2013 09:50, <[hidden email]> wrote:
> Frank Shearar uploaded a new version of Graphics to project The Trunk: > http://source.squeak.org/trunk/Graphics-fbs.209.mcz > > ==================== Summary ==================== > > Name: Graphics-fbs.209 > Author: fbs > Time: 23 April 2013, 9:50:00.413 am > UUID: 4dd577f2-2a70-4e21-8efa-5847b3ad804c > Ancestors: Graphics-tpr.208 > > #asGrafPort belongs in the Morphic package. > > =============== Diff against Graphics-tpr.208 =============== > > Item was removed: > - ----- Method: BitBlt class>>asGrafPort (in category 'instance creation') ----- > - asGrafPort > - "Return the GrafPort associated with the receiver" > - ^GrafPort! I don't see why, but this and its pair Morphic-fbs-648 seem to have triggered a nasty bug in Cog r.2714. To trigger it, * clone https://github.com/frankshearar/squeak-ci/ * open the Squeak4.5.image therein, with a (Linux) Cog r.2714 * update it. Everything proceeds fine until installing this update. On my weak little laptop things pause, and then I see the dreaded "(last object overwritten)" message. On my much more powerful work machine it just pauses. Squeak's burning a hole in the CPU, and updating is uninterruptable. frank |
In reply to this post by commits-2
On 23 April 2013 09:50, <[hidden email]> wrote:
> Frank Shearar uploaded a new version of Graphics to project The Trunk: > http://source.squeak.org/trunk/Graphics-fbs.209.mcz > > ==================== Summary ==================== > > Name: Graphics-fbs.209 > Author: fbs > Time: 23 April 2013, 9:50:00.413 am > UUID: 4dd577f2-2a70-4e21-8efa-5847b3ad804c > Ancestors: Graphics-tpr.208 > > #asGrafPort belongs in the Morphic package. > > =============== Diff against Graphics-tpr.208 =============== > > Item was removed: > - ----- Method: BitBlt class>>asGrafPort (in category 'instance creation') ----- > - asGrafPort > - "Return the GrafPort associated with the receiver" > - ^GrafPort! I don't see why, but this and its pair Morphic-fbs-648 seem to have triggered a nasty bug in Cog r.2714. To trigger it, * clone https://github.com/frankshearar/squeak-ci/ * open the Squeak4.5.image therein, with a (Linux) Cog r.2714 * update it. Everything proceeds fine until installing this update. On my weak little laptop things pause, and then I see the dreaded "(last object overwritten)" message. On my much more powerful work machine (also a Linux box) it just pauses. Squeak's burning a hole in the CPU, and updating is uninterruptable. On my work machine, upgrading using an Interpreter VM just leaves me hanging. <cog's output follows:> last object overwritten Squeak VM version: 4.0-2714 #1 Thu Apr 4 11:52:39 PDT 2013 gcc 4.1.2 Built from: CoInterpreter VMMaker.oscog-eem.282 uuid: 6c2f2048-555b-4d37-a9eb-4d9252acf3b9 Apr 4 2013 With: StackToRegisterMappingCogit VMMaker.oscog-eem.282 uuid: 6c2f2048-555b-4d37-a9eb-4d9252acf3b9 Apr 4 2013 Revision: VM: r2714 http://www.squeakvm.org/svn/squeak/branches/Cog Plugins: r2545 http://squeakvm.org/svn/squeak/trunk/platforms/Cross/plugins Build host: Linux mcqfes 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux plugin path: target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714 [default: /home/frank/Documents/squeak-ci/target/cog.r2714/coglinux/lib/squeak/4.0-2714/] C stack backtrace: target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x805cca1] target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(error+0x19)[0x805cf89] target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(instantiateClassindexableSize+0xa9)[0x807a159] target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x807b21b] [0x77745451] target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(interpret+0x1eb)[0x808080b] target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(main+0x397)[0x805d367] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x12abd6] target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x805ad61] Smalltalk stack dump: 0xbfe2ad38 M Bitmap class(Behavior)>new: 0x77b25270: a(n) Bitmap class 0xbfe2ad54 M Form>setExtent:depth: 0x7ff6e7a0: a(n) Form 0xbfe2ad74 M Form class>extent:depth: 0x77b27480: a(n) Form class 0xbfe2ada0 M DisplayText>composeForm 0x7ff6d8fc: a(n) DisplayText 0xbfe2adb8 M DisplayText>form 0x7ff6d8fc: a(n) DisplayText 0xbfe2add8 M DisplayText>displayOn:at:clippingBox:rule:fillColor: 0x7ff6d8fc: a(n) DisplayText 0xbfe2ae04 M DisplayText(DisplayObject)>displayOn:at: 0x7ff6d8fc: a(n) DisplayText 0xbfe2ae24 M ByteString(String)>displayOn:at:textColor: 0x7ff6d450: a(n) ByteString 0xbfe81ca0 M ByteString(String)>displayOn:at: 0x7ff6d450: a(n) ByteString 0xbfe81cc0 M ByteString(String)>displayAt: 0x7ff6d450: a(n) ByteString 0xbfe81cdc M Debugger class(Object)>primitiveError: 0x77dc864c: a(n) Debugger class 0xbfe81cfc M [] in Debugger class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) Debugger class 0xbfe81d18 M BlockClosure>cull: 0x7ff577ac: a(n) BlockClosure 0xbfe81d38 M [] in MethodContext(ContextPart)>handleSignal: 0x7ff6cc68: a(n) MethodContext 0xbfe81d58 M BlockClosure>ensure: 0x7ff6cd24: a(n) BlockClosure 0xbfe81d78 M MethodContext(ContextPart)>handleSignal: 0x7ff6cc68: a(n) MethodContext 0xbfe81d94 M MessageNotUnderstood(Exception)>signal 0x7ff6cad4: a(n) MessageNotUnderstood 0xbfe81db4 M BitBlt class(Object)>doesNotUnderstand: asGrafPort 0x77b22b48: a(n) BitBlt class 0xbfe81dd0 M FormCanvas>portClass 0x7ff5ca70: a(n) FormCanvas 0xbfe81de8 M FormCanvas>setForm: 0x7ff5ca70: a(n) FormCanvas 0xbfe81e04 M FormCanvas class>extent:depth: 0x77b2d750: a(n) FormCanvas class 0xbfe81e28 M RectangleMorph(Morph)>imageForm:forRectangle: 0x7ff5c550: a(n) RectangleMorph 0xbfe39d14 M RectangleMorph(Morph)>imageFormForRectangle: 0x7ff5c550: a(n) RectangleMorph 0xbfe39d30 M RectangleMorph(Morph)>imageForm 0x7ff5c550: a(n) RectangleMorph 0xbfe39d5c M ScrollBar class>createArrowOfDirection:size:color: 0x77b29268: a(n) ScrollBar class 0xbfe39d80 M [] in ScrollBar class>createArrowImagesCache 0x77b29268: a(n) ScrollBar class 0xbfe39db0 M LRUCache>at: 0x785bcddc: a(n) LRUCache 0xbfe39dcc M ScrollBar class>arrowOfDirection:size:color: 0x77b29268: a(n) ScrollBar class 0xbfe39df0 M ScrollBar>upImage 0x7ff5b408: a(n) ScrollBar 0xbfe39e10 M ScrollBar>updateUpButtonImage 0x7ff5b408: a(n) ScrollBar 0xbfe39e2c M ScrollBar>sliderColor: 0x7ff5b408: a(n) ScrollBar 0xbfe44cf8 I ScrollBar>adoptPaneColor: 0x7ff5b408: a(n) ScrollBar 0xbfe44d18 M [] in PluggableListMorphPlus(Morph)>adoptPaneColor: 0x7ff5ab30: a(n) PluggableListMorphPlus 0xbfe44d3c M Array(SequenceableCollection)>do: 0x7ff5bea4: a(n) Array 0xbfe44d58 M PluggableListMorphPlus(Morph)>submorphsDo: 0x7ff5ab30: a(n) PluggableListMorphPlus 0xbfe44d74 M PluggableListMorphPlus(Morph)>adoptPaneColor: 0x7ff5ab30: a(n) PluggableListMorphPlus 0xbfe44d90 M PluggableListMorphPlus(ScrollPane)>adoptPaneColor: 0x7ff5ab30: a(n) PluggableListMorphPlus 0xbfe44dc0 M PluggableSystemWindow(SystemWindow)>addMorph:fullFrame: 0x7ff5803c: a(n) PluggableSystemWindow 0xbfe44de0 M PluggableSystemWindow>addPaneMorph: 0x7ff5803c: a(n) PluggableSystemWindow 0xbfe44dfc M MorphicToolBuilder>add:to: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe44e2c M MorphicToolBuilder>buildPluggableList: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe6ccec M PluggableListSpec>buildWith: 0x7ff57b74: a(n) PluggableListSpec 0xbfe6cd08 M [] in MorphicToolBuilder(ToolBuilder)>buildAll:in: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe6cd28 M OrderedCollection>do: 0x7ff578dc: a(n) OrderedCollection 0xbfe6cd48 M MorphicToolBuilder(ToolBuilder)>buildAll:in: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe6cd74 M MorphicToolBuilder>buildPluggableWindow: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe6cd90 M PluggableWindowSpec>buildWith: 0x7ff57898: a(n) PluggableWindowSpec 0xbfe6cdb4 I MorphicToolBuilder(ToolBuilder)>build: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe6cddc I MorphicToolBuilder>open: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe6ce00 I MorphicToolBuilder(ToolBuilder)>openDebugger: 0x7ff57880: a(n) MorphicToolBuilder 0xbfe6ce28 M Debugger>openNotifierContents:label: 0x7ff577c4: a(n) Debugger 0xbfea4d08 M [] in Debugger class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) Debugger class 0xbfea4d24 M BlockClosure>on:do: 0x7ff5777c: a(n) BlockClosure 0xbfea4d60 M [] in Debugger class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) Debugger class 0xbfea4d88 M WorldState>runStepMethodsIn: 0x77834af8: a(n) WorldState 0xbfea4da4 M PasteUpMorph>runStepMethods 0x77c6a5ec: a(n) PasteUpMorph 0xbfea4dc0 M WorldState>doOneCycleNowFor: 0x77834af8: a(n) WorldState 0xbfea4ddc M WorldState>doOneCycleFor: 0x77834af8: a(n) WorldState 0xbfea4df8 M PasteUpMorph>doOneCycle 0x77c6a5ec: a(n) PasteUpMorph 0xbfea4e10 M [] in Project class>spawnNewProcess 0x77c54960: a(n) Project class 0xbfea4e30 I [] in BlockClosure>newProcess 0x7ff557f4: a(n) BlockClosure Most recent primitives at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: at:put: @ @ basicNew new: at:put: basicNew shallowCopy shallowCopy at:put: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: at:put: @ @ basicNew new: at:put: basicNew shallowCopy shallowCopy at:put: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: perform: basicScanCharactersFrom:to:in:rightX:stopConditions:kern: new: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: at:put: perform: at:put: species new: replaceFrom:to:with:startingAt: @ @ basicNew @ @ @ @ @ @ perform:with: @ @ species species at:put: @ basicNew basicNew: stack page bytes 4096 available headroom 3300 minimum unused headroom 2228 (last object overwritten) frank |
On 23 April 2013 10:34, Frank Shearar <[hidden email]> wrote:
> On 23 April 2013 09:50, <[hidden email]> wrote: >> Frank Shearar uploaded a new version of Graphics to project The Trunk: >> http://source.squeak.org/trunk/Graphics-fbs.209.mcz >> >> ==================== Summary ==================== >> >> Name: Graphics-fbs.209 >> Author: fbs >> Time: 23 April 2013, 9:50:00.413 am >> UUID: 4dd577f2-2a70-4e21-8efa-5847b3ad804c >> Ancestors: Graphics-tpr.208 >> >> #asGrafPort belongs in the Morphic package. >> >> =============== Diff against Graphics-tpr.208 =============== >> >> Item was removed: >> - ----- Method: BitBlt class>>asGrafPort (in category 'instance creation') ----- >> - asGrafPort >> - "Return the GrafPort associated with the receiver" >> - ^GrafPort! > > I don't see why, but this and its pair Morphic-fbs-648 seem to have > triggered a nasty bug in Cog r.2714. > > To trigger it, > * clone https://github.com/frankshearar/squeak-ci/ > * open the Squeak4.5.image therein, with a (Linux) Cog r.2714 > * update it. > > Everything proceeds fine until installing this update. I've pushed out a new config map, update-fbs.231, which loads Morphic before Graphics, thus ensuring that there's always a #asGrafPort in the image. I still don't like that Cog sprang a leak there, but at least things are back on track. All I'd wanted to do was move a method from one package to another: I really hadn't expected to completely smash updating. Is there anything I could have done before pushing to trunk to prevent this? frank |
On 23 April 2013 10:41, Frank Shearar <[hidden email]> wrote:
> On 23 April 2013 10:34, Frank Shearar <[hidden email]> wrote: >> On 23 April 2013 09:50, <[hidden email]> wrote: >>> Frank Shearar uploaded a new version of Graphics to project The Trunk: >>> http://source.squeak.org/trunk/Graphics-fbs.209.mcz >>> >>> ==================== Summary ==================== >>> >>> Name: Graphics-fbs.209 >>> Author: fbs >>> Time: 23 April 2013, 9:50:00.413 am >>> UUID: 4dd577f2-2a70-4e21-8efa-5847b3ad804c >>> Ancestors: Graphics-tpr.208 >>> >>> #asGrafPort belongs in the Morphic package. >>> >>> =============== Diff against Graphics-tpr.208 =============== >>> >>> Item was removed: >>> - ----- Method: BitBlt class>>asGrafPort (in category 'instance creation') ----- >>> - asGrafPort >>> - "Return the GrafPort associated with the receiver" >>> - ^GrafPort! >> >> I don't see why, but this and its pair Morphic-fbs-648 seem to have >> triggered a nasty bug in Cog r.2714. >> >> To trigger it, >> * clone https://github.com/frankshearar/squeak-ci/ >> * open the Squeak4.5.image therein, with a (Linux) Cog r.2714 >> * update it. >> >> Everything proceeds fine until installing this update. > > I've pushed out a new config map, update-fbs.231 And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes don't accidentally find their way back into the trunk image through the update stream. frank |
On 2013-04-23, at 11:55, Frank Shearar <[hidden email]> wrote:
> And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes > don't accidentally find their way back into the trunk image through > the update stream. Why is that? Why would we not want to have the XML parser in trunk? The plan was for the build server to use an image that didn't have the packages, but load the trunk map to build a full image. Otherwise, how would we update the XML package? - Bert - |
In reply to this post by Frank Shearar-3
On 2013-04-23, at 11:41, Frank Shearar <[hidden email]> wrote:
> I've pushed out a new config map, update-fbs.231, which loads Morphic > before Graphics, thus ensuring that there's always a #asGrafPort in > the image. I still don't like that Cog sprang a leak there, but at > least things are back on track. > > All I'd wanted to do was move a method from one package to another: I > really hadn't expected to completely smash updating. Is there anything > I could have done before pushing to trunk to prevent this? > > frank Moving an active method from one package to another is fragile, as you discovered. The moved-to package must be loaded first, otherwise the method is deleted from the system. The proper way to let MC handle this would be to load the two packages together, in which case the order would not matter. But this had worse consequences so we're using the update-map order instead. A possible solution would be to go through the whole update map first and find the "bad" moves (those where a method or class would be deleted and later added again) and load only these. Since it only reclassifies, the actual system behavior would be unchanged. But the loading would succeed without introducing obsolete instances and missing methods. - Bert - |
In reply to this post by Frank Shearar-3
Hi Frank,
I need to be able to reproduce this. The error message means what it says; some code in the VM (primitives usually) has written beyond the end of an object, which, if it weren't happening to the last object in memory would smash the following object, crashing the GC. So when this happens please attempt to create an image that reproduces the bug and then I can track down the offending overwrite.
The VM fills the nursery zone with a specific bit pattern (each 4-byte word contains its address) and checks on allocation that the allocation pointer is pointing at a word with the right contents. If not, it aborts. In this case the effects are benign (because the overwrite is writing beyond the allocation pointer where there are no objects). But if whatever code overwrote did so to an object in the middle of the heap a less easily diagnosed crash would occur.
On Tue, Apr 23, 2013 at 2:34 AM, Frank Shearar <[hidden email]> wrote:
best, Eliot
|
In reply to this post by Bert Freudenberg
On 23 April 2013 15:14, Bert Freudenberg <[hidden email]> wrote:
> On 2013-04-23, at 11:41, Frank Shearar <[hidden email]> wrote: > >> I've pushed out a new config map, update-fbs.231, which loads Morphic >> before Graphics, thus ensuring that there's always a #asGrafPort in >> the image. I still don't like that Cog sprang a leak there, but at >> least things are back on track. >> >> All I'd wanted to do was move a method from one package to another: I >> really hadn't expected to completely smash updating. Is there anything >> I could have done before pushing to trunk to prevent this? >> >> frank > > Moving an active method from one package to another is fragile, as you discovered. The moved-to package must be loaded first, otherwise the method is deleted from the system. > > The proper way to let MC handle this would be to load the two packages together, in which case the order would not matter. But this had worse consequences so we're using the update-map order instead. Do you mean using slices? If so, what are the worse problems? > A possible solution would be to go through the whole update map first and find the "bad" moves (those where a method or class would be deleted and later added again) and load only these. Since it only reclassifies, the actual system behavior would be unchanged. But the loading would succeed without introducing obsolete instances and missing methods. That sounds like it could work. You have to get all those new updates anyway, so getting them up front and "merging" them wouldn't be (much of) a performance hit. > - Bert - |
In reply to this post by Eliot Miranda-2
Hi Eliot,
There's an image in your inbox. This crashes on my laptop (Ubuntu 10.10, 32 bit machine), but on my work machine (Ubuntu 10.10, 64 bit machine) just hangs forever. IIRC this is the same behaviour as the last image I sent you, with my parsing derivatives stuff triggering the overwrite. frank On 23 April 2013 18:20, Eliot Miranda <[hidden email]> wrote: > Hi Frank, > > I need to be able to reproduce this. The error message means what it > says; some code in the VM (primitives usually) has written beyond the end of > an object, which, if it weren't happening to the last object in memory would > smash the following object, crashing the GC. So when this happens please > attempt to create an image that reproduces the bug and then I can track down > the offending overwrite. > > The VM fills the nursery zone with a specific bit pattern (each 4-byte word > contains its address) and checks on allocation that the allocation pointer > is pointing at a word with the right contents. If not, it aborts. In this > case the effects are benign (because the overwrite is writing beyond the > allocation pointer where there are no objects). But if whatever code > overwrote did so to an object in the middle of the heap a less easily > diagnosed crash would occur. > > > On Tue, Apr 23, 2013 at 2:34 AM, Frank Shearar <[hidden email]> > wrote: >> >> On 23 April 2013 09:50, <[hidden email]> wrote: >> > Frank Shearar uploaded a new version of Graphics to project The Trunk: >> > http://source.squeak.org/trunk/Graphics-fbs.209.mcz >> > >> > ==================== Summary ==================== >> > >> > Name: Graphics-fbs.209 >> > Author: fbs >> > Time: 23 April 2013, 9:50:00.413 am >> > UUID: 4dd577f2-2a70-4e21-8efa-5847b3ad804c >> > Ancestors: Graphics-tpr.208 >> > >> > #asGrafPort belongs in the Morphic package. >> > >> > =============== Diff against Graphics-tpr.208 =============== >> > >> > Item was removed: >> > - ----- Method: BitBlt class>>asGrafPort (in category 'instance >> > creation') ----- >> > - asGrafPort >> > - "Return the GrafPort associated with the receiver" >> > - ^GrafPort! >> >> I don't see why, but this and its pair Morphic-fbs-648 seem to have >> triggered a nasty bug in Cog r.2714. >> >> To trigger it, >> * clone https://github.com/frankshearar/squeak-ci/ >> * open the Squeak4.5.image therein, with a (Linux) Cog r.2714 >> * update it. >> >> Everything proceeds fine until installing this update. On my weak >> little laptop things pause, and then I see the dreaded "(last object >> overwritten)" message. On my much more powerful work machine (also a >> Linux box) it just pauses. Squeak's burning a hole in the CPU, and >> updating is uninterruptable. >> >> On my work machine, upgrading using an Interpreter VM just leaves me >> hanging. >> >> <cog's output follows:> >> last object overwritten >> >> Squeak VM version: 4.0-2714 #1 Thu Apr 4 11:52:39 PDT 2013 gcc 4.1.2 >> Built from: CoInterpreter VMMaker.oscog-eem.282 uuid: >> 6c2f2048-555b-4d37-a9eb-4d9252acf3b9 Apr 4 2013 >> With: StackToRegisterMappingCogit VMMaker.oscog-eem.282 uuid: >> 6c2f2048-555b-4d37-a9eb-4d9252acf3b9 Apr 4 2013 >> Revision: VM: r2714 http://www.squeakvm.org/svn/squeak/branches/Cog >> Plugins: r2545 >> http://squeakvm.org/svn/squeak/trunk/platforms/Cross/plugins >> Build host: Linux mcqfes 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST >> 2009 i686 i686 i386 GNU/Linux >> plugin path: target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714 >> [default: >> /home/frank/Documents/squeak-ci/target/cog.r2714/coglinux/lib/squeak/4.0-2714/] >> >> >> C stack backtrace: >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x805cca1] >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(error+0x19)[0x805cf89] >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(instantiateClassindexableSize+0xa9)[0x807a159] >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x807b21b] >> [0x77745451] >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(interpret+0x1eb)[0x808080b] >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(main+0x397)[0x805d367] >> /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x12abd6] >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x805ad61] >> >> >> Smalltalk stack dump: >> 0xbfe2ad38 M Bitmap class(Behavior)>new: 0x77b25270: a(n) Bitmap class >> 0xbfe2ad54 M Form>setExtent:depth: 0x7ff6e7a0: a(n) Form >> 0xbfe2ad74 M Form class>extent:depth: 0x77b27480: a(n) Form class >> 0xbfe2ada0 M DisplayText>composeForm 0x7ff6d8fc: a(n) DisplayText >> 0xbfe2adb8 M DisplayText>form 0x7ff6d8fc: a(n) DisplayText >> 0xbfe2add8 M DisplayText>displayOn:at:clippingBox:rule:fillColor: >> 0x7ff6d8fc: a(n) DisplayText >> 0xbfe2ae04 M DisplayText(DisplayObject)>displayOn:at: 0x7ff6d8fc: a(n) >> DisplayText >> 0xbfe2ae24 M ByteString(String)>displayOn:at:textColor: 0x7ff6d450: >> a(n) ByteString >> 0xbfe81ca0 M ByteString(String)>displayOn:at: 0x7ff6d450: a(n) ByteString >> 0xbfe81cc0 M ByteString(String)>displayAt: 0x7ff6d450: a(n) ByteString >> 0xbfe81cdc M Debugger class(Object)>primitiveError: 0x77dc864c: a(n) >> Debugger class >> 0xbfe81cfc M [] in Debugger >> class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) >> Debugger class >> 0xbfe81d18 M BlockClosure>cull: 0x7ff577ac: a(n) BlockClosure >> 0xbfe81d38 M [] in MethodContext(ContextPart)>handleSignal: >> 0x7ff6cc68: a(n) MethodContext >> 0xbfe81d58 M BlockClosure>ensure: 0x7ff6cd24: a(n) BlockClosure >> 0xbfe81d78 M MethodContext(ContextPart)>handleSignal: 0x7ff6cc68: a(n) >> MethodContext >> 0xbfe81d94 M MessageNotUnderstood(Exception)>signal 0x7ff6cad4: a(n) >> MessageNotUnderstood >> 0xbfe81db4 M BitBlt class(Object)>doesNotUnderstand: asGrafPort >> 0x77b22b48: a(n) BitBlt class >> 0xbfe81dd0 M FormCanvas>portClass 0x7ff5ca70: a(n) FormCanvas >> 0xbfe81de8 M FormCanvas>setForm: 0x7ff5ca70: a(n) FormCanvas >> 0xbfe81e04 M FormCanvas class>extent:depth: 0x77b2d750: a(n) FormCanvas >> class >> 0xbfe81e28 M RectangleMorph(Morph)>imageForm:forRectangle: 0x7ff5c550: >> a(n) RectangleMorph >> 0xbfe39d14 M RectangleMorph(Morph)>imageFormForRectangle: 0x7ff5c550: >> a(n) RectangleMorph >> 0xbfe39d30 M RectangleMorph(Morph)>imageForm 0x7ff5c550: a(n) >> RectangleMorph >> 0xbfe39d5c M ScrollBar class>createArrowOfDirection:size:color: >> 0x77b29268: a(n) ScrollBar class >> 0xbfe39d80 M [] in ScrollBar class>createArrowImagesCache 0x77b29268: >> a(n) ScrollBar class >> 0xbfe39db0 M LRUCache>at: 0x785bcddc: a(n) LRUCache >> 0xbfe39dcc M ScrollBar class>arrowOfDirection:size:color: 0x77b29268: >> a(n) ScrollBar class >> 0xbfe39df0 M ScrollBar>upImage 0x7ff5b408: a(n) ScrollBar >> 0xbfe39e10 M ScrollBar>updateUpButtonImage 0x7ff5b408: a(n) ScrollBar >> 0xbfe39e2c M ScrollBar>sliderColor: 0x7ff5b408: a(n) ScrollBar >> 0xbfe44cf8 I ScrollBar>adoptPaneColor: 0x7ff5b408: a(n) ScrollBar >> 0xbfe44d18 M [] in PluggableListMorphPlus(Morph)>adoptPaneColor: >> 0x7ff5ab30: a(n) PluggableListMorphPlus >> 0xbfe44d3c M Array(SequenceableCollection)>do: 0x7ff5bea4: a(n) Array >> 0xbfe44d58 M PluggableListMorphPlus(Morph)>submorphsDo: 0x7ff5ab30: >> a(n) PluggableListMorphPlus >> 0xbfe44d74 M PluggableListMorphPlus(Morph)>adoptPaneColor: 0x7ff5ab30: >> a(n) PluggableListMorphPlus >> 0xbfe44d90 M PluggableListMorphPlus(ScrollPane)>adoptPaneColor: >> 0x7ff5ab30: a(n) PluggableListMorphPlus >> 0xbfe44dc0 M PluggableSystemWindow(SystemWindow)>addMorph:fullFrame: >> 0x7ff5803c: a(n) PluggableSystemWindow >> 0xbfe44de0 M PluggableSystemWindow>addPaneMorph: 0x7ff5803c: a(n) >> PluggableSystemWindow >> 0xbfe44dfc M MorphicToolBuilder>add:to: 0x7ff57880: a(n) >> MorphicToolBuilder >> 0xbfe44e2c M MorphicToolBuilder>buildPluggableList: 0x7ff57880: a(n) >> MorphicToolBuilder >> 0xbfe6ccec M PluggableListSpec>buildWith: 0x7ff57b74: a(n) >> PluggableListSpec >> 0xbfe6cd08 M [] in MorphicToolBuilder(ToolBuilder)>buildAll:in: >> 0x7ff57880: a(n) >> MorphicToolBuilder >> 0xbfe6cd28 M OrderedCollection>do: 0x7ff578dc: a(n) OrderedCollection >> 0xbfe6cd48 M MorphicToolBuilder(ToolBuilder)>buildAll:in: 0x7ff57880: >> a(n) MorphicToolBuilder >> 0xbfe6cd74 M MorphicToolBuilder>buildPluggableWindow: 0x7ff57880: a(n) >> MorphicToolBuilder >> 0xbfe6cd90 M PluggableWindowSpec>buildWith: 0x7ff57898: a(n) >> PluggableWindowSpec >> 0xbfe6cdb4 I MorphicToolBuilder(ToolBuilder)>build: 0x7ff57880: a(n) >> MorphicToolBuilder >> 0xbfe6cddc I MorphicToolBuilder>open: 0x7ff57880: a(n) MorphicToolBuilder >> 0xbfe6ce00 I MorphicToolBuilder(ToolBuilder)>openDebugger: 0x7ff57880: >> a(n) MorphicToolBuilder >> 0xbfe6ce28 M Debugger>openNotifierContents:label: 0x7ff577c4: a(n) >> Debugger >> 0xbfea4d08 M [] in Debugger >> class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) >> Debugger class >> 0xbfea4d24 M BlockClosure>on:do: 0x7ff5777c: a(n) BlockClosure >> 0xbfea4d60 M [] in Debugger >> class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) >> Debugger class >> 0xbfea4d88 M WorldState>runStepMethodsIn: 0x77834af8: a(n) WorldState >> 0xbfea4da4 M PasteUpMorph>runStepMethods 0x77c6a5ec: a(n) PasteUpMorph >> 0xbfea4dc0 M WorldState>doOneCycleNowFor: 0x77834af8: a(n) WorldState >> 0xbfea4ddc M WorldState>doOneCycleFor: 0x77834af8: a(n) WorldState >> 0xbfea4df8 M PasteUpMorph>doOneCycle 0x77c6a5ec: a(n) PasteUpMorph >> 0xbfea4e10 M [] in Project class>spawnNewProcess 0x77c54960: a(n) Project >> class >> 0xbfea4e30 I [] in BlockClosure>newProcess 0x7ff557f4: a(n) BlockClosure >> >> Most recent primitives >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> at:put: >> @ >> @ >> basicNew >> new: >> at:put: >> basicNew >> shallowCopy >> shallowCopy >> at:put: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> at:put: >> @ >> @ >> basicNew >> new: >> at:put: >> basicNew >> shallowCopy >> shallowCopy >> at:put: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> new: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> at:put: >> perform: >> at:put: >> species >> new: >> replaceFrom:to:with:startingAt: >> @ >> @ >> basicNew >> @ >> @ >> @ >> @ >> @ >> @ >> perform:with: >> @ >> @ >> species >> species >> at:put: >> @ >> basicNew >> basicNew: >> >> stack page bytes 4096 available headroom 3300 minimum unused headroom 2228 >> >> (last object overwritten) >> >> frank >> > > > > -- > best, > Eliot > > > |
In reply to this post by Frank Shearar-3
On 2013-04-24, at 11:24, Frank Shearar <[hidden email]> wrote:
> On 23 April 2013 15:14, Bert Freudenberg <[hidden email]> wrote: >> Moving an active method from one package to another is fragile, as you discovered. The moved-to package must be loaded first, otherwise the method is deleted from the system. >> >> The proper way to let MC handle this would be to load the two packages together, in which case the order would not matter. But this had worse consequences so we're using the update-map order instead. > > Do you mean using slices? No. Just adding all versions from a config to a single MCVersionLoader and then loading them in one go. > If so, what are the worse problems? I don't quite remember. Might have to do with initialization order. It's a lot less predictable, for sure. >> A possible solution would be to go through the whole update map first and find the "bad" moves (those where a method or class would be deleted and later added again) and load only these. Since it only reclassifies, the actual system behavior would be unchanged. But the loading would succeed without introducing obsolete instances and missing methods. > > That sounds like it could work. You have to get all those new updates > anyway, so getting them up front and "merging" them wouldn't be (much > of) a performance hit. Well, it is going to be a a little more complicated if we want to avoid diffing twice (which is the major time consumer when loading an MC version). OTOH the critical cases might be easy to detect, and they should be few and far between ... - Bert - |
In reply to this post by Frank Shearar-3
On Wed, Apr 24, 2013 at 11:24 AM, Frank Shearar <[hidden email]> wrote:
Could a preamble with the method in concern inlined work ?
Karl
|
On 2013-04-24, at 16:46, karl ramberg <[hidden email]> wrote:
> On 23 April 2013 15:14, Bert Freudenberg <[hidden email]> wrote: >> A possible solution would be to go through the whole update map first and find the "bad" moves (those where a method or class would be deleted and later added again) and load only these. Since it only reclassifies, the actual system behavior would be unchanged. But the loading would succeed without introducing obsolete instances and missing methods. >> Could a preamble with the method in concern inlined work ? > > Karl That would be way too fragile, IMHO. And I think it would make contributing such recategorizations harder, not easier. - Bert - |
On Wed, Apr 24, 2013 at 4:58 PM, Bert Freudenberg <[hidden email]> wrote:
Ok Karl
|
In reply to this post by Frank Shearar-3
On Tue, 23 Apr 2013, Frank Shearar wrote:
> > I've pushed out a new config map, update-fbs.231, which loads Morphic > before Graphics, thus ensuring that there's always a #asGrafPort in > the image. I still don't like that Cog sprang a leak there, but at > least things are back on track. > > All I'd wanted to do was move a method from one package to another: I > really hadn't expected to completely smash updating. Is there anything Instead of changing the order of packages in the config map, you could have created a map which contains the new version of Morphic (which contains the method), but still the previous version of Graphics (which also has the method). So when that update map is fully processed, the method is still in the image (in 2 packages). The method will be removed from Graphics, when the updater loads the newer version of it. > I could have done before pushing to trunk to prevent this? Yes. This is how we used to do it: 1) upload the package which you want to contain the method (in this case Morphic) 2) create a new update map (containting the latest version of all packages as usual) 3) upload the package which you don't want to contain the method (in this case Graphics) This way you don't have to tweak the update map. Levente > > frank > > |
In reply to this post by Frank Shearar-3
Hi Frank,
On Wed, Apr 24, 2013 at 3:37 AM, Frank Shearar <[hidden email]> wrote: Hi Eliot, This is an infinite recursion, since asGrafPort is needed to create a notifier, and so provokes another attempt to open one: 0x178dffc8 s BitBlt class(Object)>doesNotUnderstand: asGrafPort
0x17b5de40 s FormCanvas>portClass 0x17b5ea64 s FormCanvas>setForm: 0x17b5efc8 s FormCanvas class>on: 0x17b5f4d0 s DisplayText>composeForm 0x17b5f97c s DisplayText>form
0x1784e2cc s DisplayText>displayOn:at:clippingBox:rule:fillColor: 0x1784e270 s DisplayText(DisplayObject)>displayOn:at: 0x17da03ec s ByteString(String)>displayOn:at:textColor: 0x17da0784 s ByteString(String)>displayOn:at:
0x17da0b78 s ByteString(String)>displayAt: 0x1784dd20 s MorphicProject(Object)>primitiveError: 0x1784dd7c s MorphicProject>handleFatalDrawingError: 0x1784d5f0 s [] in WorldState>displayWorldSafely:
0x1784d6a8 s BlockClosure>cull:cull: 0x1784d560 s [] in BlockClosure>ifError: 0x1784d64c s BlockClosure>cull: 0x1784d704 s [] in MethodContext(ContextPart)>handleSignal:
0x1784d760 s BlockClosure>ensure: 0x1784d4d8 s MethodContext(ContextPart)>handleSignal: 0x1784d3c4 s MessageNotUnderstood(Exception)>signal 0x1784d420 s BitBlt class(Object)>doesNotUnderstand: asGrafPort
0x1784d7bc s FormCanvas>portClass 0x1784d818 s FormCanvas>resetGrafPort 0x1784d874 s FormCanvas>copy 0x1784d8d0 s FormCanvas>copyOrigin:clipRect: 0x1784d92c s FormCanvas>copyClipRect:
0x1784d200 s [] in WorldState>drawWorld:submorphs:invalidAreasOn: 0x1784d1a4 s Rectangle>allAreasOutsideList:startingAt:do: 0x1784d988 s Rectangle>allAreasOutsideList:do: 0x1784d078 s [] in WorldState>drawWorld:submorphs:invalidAreasOn:
0x1784d9e4 s Array(SequenceableCollection)>do: 0x1784ced4 s WorldState>drawWorld:submorphs:invalidAreasOn: 0x1784da40 s [] in WorldState>displayWorld:submorphs: 0x1784da9c s FormCanvas>roundCornersOf:in:during:
0x1784daf8 s FormCanvas(Canvas)>roundCornersOf:during: 0x1784cdf4 s WorldState>displayWorld:submorphs: 0x1784ce70 s PasteUpMorph>privateOuterDisplayWorld 0x1784db54 s PasteUpMorph>displayWorld
0x1784dbb0 s [] in WorldState>displayWorldSafely: 0x1784d47c s BlockClosure>on:do: 0x1784cd74 s BlockClosure>ifError: 0x1784ccec s WorldState>displayWorldSafely: 0x1784cc3c s WorldState>doOneCycleNowFor:
0x1784dc0c s WorldState>doOneCycleFor: 0x1784dc68 s PasteUpMorph>doOneCycle 0x1784dcc4 s [] in Project class>spawnNewProcess 0x1784c424 s [] in BlockClosure>newProcess
best, Eliot
|
On 24 April 2013 17:50, Eliot Miranda <[hidden email]> wrote:
> Hi Frank, > > On Wed, Apr 24, 2013 at 3:37 AM, Frank Shearar <[hidden email]> > wrote: >> >> Hi Eliot, >> >> There's an image in your inbox. This crashes on my laptop (Ubuntu >> 10.10, 32 bit machine), but on my work machine (Ubuntu 10.10, 64 bit >> machine) just hangs forever. > > > This is an infinite recursion, since asGrafPort is needed to create a > notifier, and so provokes another attempt to open one: OK, that makes perfect sense. While I don't suggest we solve the halting problem, is there a way to make the symptom look less like it's Cog's fault? (The other image I sent you should _not_ have an infinite loop, even though it'll look like it (because it's about 6000 blocks nested through #compose:)). frank >> IIRC this is the same behaviour as the last image I sent you, with my >> parsing derivatives stuff triggering the overwrite. >> >> frank >> >> On 23 April 2013 18:20, Eliot Miranda <[hidden email]> wrote: >> > Hi Frank, >> > >> > I need to be able to reproduce this. The error message means what >> > it >> > says; some code in the VM (primitives usually) has written beyond the >> > end of >> > an object, which, if it weren't happening to the last object in memory >> > would >> > smash the following object, crashing the GC. So when this happens >> > please >> > attempt to create an image that reproduces the bug and then I can track >> > down >> > the offending overwrite. >> > >> > The VM fills the nursery zone with a specific bit pattern (each 4-byte >> > word >> > contains its address) and checks on allocation that the allocation >> > pointer >> > is pointing at a word with the right contents. If not, it aborts. In >> > this >> > case the effects are benign (because the overwrite is writing beyond the >> > allocation pointer where there are no objects). But if whatever code >> > overwrote did so to an object in the middle of the heap a less easily >> > diagnosed crash would occur. >> > >> > >> > On Tue, Apr 23, 2013 at 2:34 AM, Frank Shearar <[hidden email]> >> > wrote: >> >> >> >> On 23 April 2013 09:50, <[hidden email]> wrote: >> >> > Frank Shearar uploaded a new version of Graphics to project The >> >> > Trunk: >> >> > http://source.squeak.org/trunk/Graphics-fbs.209.mcz >> >> > >> >> > ==================== Summary ==================== >> >> > >> >> > Name: Graphics-fbs.209 >> >> > Author: fbs >> >> > Time: 23 April 2013, 9:50:00.413 am >> >> > UUID: 4dd577f2-2a70-4e21-8efa-5847b3ad804c >> >> > Ancestors: Graphics-tpr.208 >> >> > >> >> > #asGrafPort belongs in the Morphic package. >> >> > >> >> > =============== Diff against Graphics-tpr.208 =============== >> >> > >> >> > Item was removed: >> >> > - ----- Method: BitBlt class>>asGrafPort (in category 'instance >> >> > creation') ----- >> >> > - asGrafPort >> >> > - "Return the GrafPort associated with the receiver" >> >> > - ^GrafPort! >> >> >> >> I don't see why, but this and its pair Morphic-fbs-648 seem to have >> >> triggered a nasty bug in Cog r.2714. >> >> >> >> To trigger it, >> >> * clone https://github.com/frankshearar/squeak-ci/ >> >> * open the Squeak4.5.image therein, with a (Linux) Cog r.2714 >> >> * update it. >> >> >> >> Everything proceeds fine until installing this update. On my weak >> >> little laptop things pause, and then I see the dreaded "(last object >> >> overwritten)" message. On my much more powerful work machine (also a >> >> Linux box) it just pauses. Squeak's burning a hole in the CPU, and >> >> updating is uninterruptable. >> >> >> >> On my work machine, upgrading using an Interpreter VM just leaves me >> >> hanging. >> >> >> >> <cog's output follows:> >> >> last object overwritten >> >> >> >> Squeak VM version: 4.0-2714 #1 Thu Apr 4 11:52:39 PDT 2013 gcc 4.1.2 >> >> Built from: CoInterpreter VMMaker.oscog-eem.282 uuid: >> >> 6c2f2048-555b-4d37-a9eb-4d9252acf3b9 Apr 4 2013 >> >> With: StackToRegisterMappingCogit VMMaker.oscog-eem.282 uuid: >> >> 6c2f2048-555b-4d37-a9eb-4d9252acf3b9 Apr 4 2013 >> >> Revision: VM: r2714 http://www.squeakvm.org/svn/squeak/branches/Cog >> >> Plugins: r2545 >> >> http://squeakvm.org/svn/squeak/trunk/platforms/Cross/plugins >> >> Build host: Linux mcqfes 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST >> >> 2009 i686 i686 i386 GNU/Linux >> >> plugin path: target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714 >> >> [default: >> >> >> >> /home/frank/Documents/squeak-ci/target/cog.r2714/coglinux/lib/squeak/4.0-2714/] >> >> >> >> >> >> C stack backtrace: >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x805cca1] >> >> >> >> >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(error+0x19)[0x805cf89] >> >> >> >> >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(instantiateClassindexableSize+0xa9)[0x807a159] >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x807b21b] >> >> [0x77745451] >> >> >> >> >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(interpret+0x1eb)[0x808080b] >> >> >> >> >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak(main+0x397)[0x805d367] >> >> /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x12abd6] >> >> target/cog.r2714/coglinux/bin/../lib/squeak/4.0-2714/squeak[0x805ad61] >> >> >> >> >> >> Smalltalk stack dump: >> >> 0xbfe2ad38 M Bitmap class(Behavior)>new: 0x77b25270: a(n) Bitmap class >> >> 0xbfe2ad54 M Form>setExtent:depth: 0x7ff6e7a0: a(n) Form >> >> 0xbfe2ad74 M Form class>extent:depth: 0x77b27480: a(n) Form class >> >> 0xbfe2ada0 M DisplayText>composeForm 0x7ff6d8fc: a(n) DisplayText >> >> 0xbfe2adb8 M DisplayText>form 0x7ff6d8fc: a(n) DisplayText >> >> 0xbfe2add8 M DisplayText>displayOn:at:clippingBox:rule:fillColor: >> >> 0x7ff6d8fc: a(n) DisplayText >> >> 0xbfe2ae04 M DisplayText(DisplayObject)>displayOn:at: 0x7ff6d8fc: a(n) >> >> DisplayText >> >> 0xbfe2ae24 M ByteString(String)>displayOn:at:textColor: 0x7ff6d450: >> >> a(n) ByteString >> >> 0xbfe81ca0 M ByteString(String)>displayOn:at: 0x7ff6d450: a(n) >> >> ByteString >> >> 0xbfe81cc0 M ByteString(String)>displayAt: 0x7ff6d450: a(n) ByteString >> >> 0xbfe81cdc M Debugger class(Object)>primitiveError: 0x77dc864c: a(n) >> >> Debugger class >> >> 0xbfe81cfc M [] in Debugger >> >> class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) >> >> Debugger class >> >> 0xbfe81d18 M BlockClosure>cull: 0x7ff577ac: a(n) BlockClosure >> >> 0xbfe81d38 M [] in MethodContext(ContextPart)>handleSignal: >> >> 0x7ff6cc68: a(n) MethodContext >> >> 0xbfe81d58 M BlockClosure>ensure: 0x7ff6cd24: a(n) BlockClosure >> >> 0xbfe81d78 M MethodContext(ContextPart)>handleSignal: 0x7ff6cc68: a(n) >> >> MethodContext >> >> 0xbfe81d94 M MessageNotUnderstood(Exception)>signal 0x7ff6cad4: a(n) >> >> MessageNotUnderstood >> >> 0xbfe81db4 M BitBlt class(Object)>doesNotUnderstand: asGrafPort >> >> 0x77b22b48: a(n) BitBlt class >> >> 0xbfe81dd0 M FormCanvas>portClass 0x7ff5ca70: a(n) FormCanvas >> >> 0xbfe81de8 M FormCanvas>setForm: 0x7ff5ca70: a(n) FormCanvas >> >> 0xbfe81e04 M FormCanvas class>extent:depth: 0x77b2d750: a(n) FormCanvas >> >> class >> >> 0xbfe81e28 M RectangleMorph(Morph)>imageForm:forRectangle: 0x7ff5c550: >> >> a(n) RectangleMorph >> >> 0xbfe39d14 M RectangleMorph(Morph)>imageFormForRectangle: 0x7ff5c550: >> >> a(n) RectangleMorph >> >> 0xbfe39d30 M RectangleMorph(Morph)>imageForm 0x7ff5c550: a(n) >> >> RectangleMorph >> >> 0xbfe39d5c M ScrollBar class>createArrowOfDirection:size:color: >> >> 0x77b29268: a(n) ScrollBar class >> >> 0xbfe39d80 M [] in ScrollBar class>createArrowImagesCache 0x77b29268: >> >> a(n) ScrollBar class >> >> 0xbfe39db0 M LRUCache>at: 0x785bcddc: a(n) LRUCache >> >> 0xbfe39dcc M ScrollBar class>arrowOfDirection:size:color: 0x77b29268: >> >> a(n) ScrollBar class >> >> 0xbfe39df0 M ScrollBar>upImage 0x7ff5b408: a(n) ScrollBar >> >> 0xbfe39e10 M ScrollBar>updateUpButtonImage 0x7ff5b408: a(n) ScrollBar >> >> 0xbfe39e2c M ScrollBar>sliderColor: 0x7ff5b408: a(n) ScrollBar >> >> 0xbfe44cf8 I ScrollBar>adoptPaneColor: 0x7ff5b408: a(n) ScrollBar >> >> 0xbfe44d18 M [] in PluggableListMorphPlus(Morph)>adoptPaneColor: >> >> 0x7ff5ab30: a(n) PluggableListMorphPlus >> >> 0xbfe44d3c M Array(SequenceableCollection)>do: 0x7ff5bea4: a(n) Array >> >> 0xbfe44d58 M PluggableListMorphPlus(Morph)>submorphsDo: 0x7ff5ab30: >> >> a(n) PluggableListMorphPlus >> >> 0xbfe44d74 M PluggableListMorphPlus(Morph)>adoptPaneColor: 0x7ff5ab30: >> >> a(n) PluggableListMorphPlus >> >> 0xbfe44d90 M PluggableListMorphPlus(ScrollPane)>adoptPaneColor: >> >> 0x7ff5ab30: a(n) PluggableListMorphPlus >> >> 0xbfe44dc0 M PluggableSystemWindow(SystemWindow)>addMorph:fullFrame: >> >> 0x7ff5803c: a(n) PluggableSystemWindow >> >> 0xbfe44de0 M PluggableSystemWindow>addPaneMorph: 0x7ff5803c: a(n) >> >> PluggableSystemWindow >> >> 0xbfe44dfc M MorphicToolBuilder>add:to: 0x7ff57880: a(n) >> >> MorphicToolBuilder >> >> 0xbfe44e2c M MorphicToolBuilder>buildPluggableList: 0x7ff57880: a(n) >> >> MorphicToolBuilder >> >> 0xbfe6ccec M PluggableListSpec>buildWith: 0x7ff57b74: a(n) >> >> PluggableListSpec >> >> 0xbfe6cd08 M [] in MorphicToolBuilder(ToolBuilder)>buildAll:in: >> >> 0x7ff57880: a(n) >> >> MorphicToolBuilder >> >> 0xbfe6cd28 M OrderedCollection>do: 0x7ff578dc: a(n) OrderedCollection >> >> 0xbfe6cd48 M MorphicToolBuilder(ToolBuilder)>buildAll:in: 0x7ff57880: >> >> a(n) MorphicToolBuilder >> >> 0xbfe6cd74 M MorphicToolBuilder>buildPluggableWindow: 0x7ff57880: a(n) >> >> MorphicToolBuilder >> >> 0xbfe6cd90 M PluggableWindowSpec>buildWith: 0x7ff57898: a(n) >> >> PluggableWindowSpec >> >> 0xbfe6cdb4 I MorphicToolBuilder(ToolBuilder)>build: 0x7ff57880: a(n) >> >> MorphicToolBuilder >> >> 0xbfe6cddc I MorphicToolBuilder>open: 0x7ff57880: a(n) >> >> MorphicToolBuilder >> >> 0xbfe6ce00 I MorphicToolBuilder(ToolBuilder)>openDebugger: 0x7ff57880: >> >> a(n) MorphicToolBuilder >> >> 0xbfe6ce28 M Debugger>openNotifierContents:label: 0x7ff577c4: a(n) >> >> Debugger >> >> 0xbfea4d08 M [] in Debugger >> >> class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) >> >> Debugger class >> >> 0xbfea4d24 M BlockClosure>on:do: 0x7ff5777c: a(n) BlockClosure >> >> 0xbfea4d60 M [] in Debugger >> >> class>morphicOpenOn:context:label:contents:fullView: 0x77dc864c: a(n) >> >> Debugger class >> >> 0xbfea4d88 M WorldState>runStepMethodsIn: 0x77834af8: a(n) WorldState >> >> 0xbfea4da4 M PasteUpMorph>runStepMethods 0x77c6a5ec: a(n) PasteUpMorph >> >> 0xbfea4dc0 M WorldState>doOneCycleNowFor: 0x77834af8: a(n) WorldState >> >> 0xbfea4ddc M WorldState>doOneCycleFor: 0x77834af8: a(n) WorldState >> >> 0xbfea4df8 M PasteUpMorph>doOneCycle 0x77c6a5ec: a(n) PasteUpMorph >> >> 0xbfea4e10 M [] in Project class>spawnNewProcess 0x77c54960: a(n) >> >> Project >> >> class >> >> 0xbfea4e30 I [] in BlockClosure>newProcess 0x7ff557f4: a(n) >> >> BlockClosure >> >> >> >> Most recent primitives >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> at:put: >> >> @ >> >> @ >> >> basicNew >> >> new: >> >> at:put: >> >> basicNew >> >> shallowCopy >> >> shallowCopy >> >> at:put: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> at:put: >> >> @ >> >> @ >> >> basicNew >> >> new: >> >> at:put: >> >> basicNew >> >> shallowCopy >> >> shallowCopy >> >> at:put: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> basicScanCharactersFrom:to:in:rightX:stopConditions:kern: >> >> new: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> at:put: >> >> perform: >> >> at:put: >> >> species >> >> new: >> >> replaceFrom:to:with:startingAt: >> >> @ >> >> @ >> >> basicNew >> >> @ >> >> @ >> >> @ >> >> @ >> >> @ >> >> @ >> >> perform:with: >> >> @ >> >> @ >> >> species >> >> species >> >> at:put: >> >> @ >> >> basicNew >> >> basicNew: >> >> >> >> stack page bytes 4096 available headroom 3300 minimum unused headroom >> >> 2228 >> >> >> >> (last object overwritten) >> >> >> >> frank >> >> >> > >> > >> > >> > -- >> > best, >> > Eliot >> > >> > >> > >> > > > > -- > best, > Eliot > > > |
In reply to this post by Levente Uzonyi-2
On 24 April 2013 16:47, Levente Uzonyi <[hidden email]> wrote:
> On Tue, 23 Apr 2013, Frank Shearar wrote: > >> >> I've pushed out a new config map, update-fbs.231, which loads Morphic >> before Graphics, thus ensuring that there's always a #asGrafPort in >> the image. I still don't like that Cog sprang a leak there, but at >> least things are back on track. >> >> All I'd wanted to do was move a method from one package to another: I >> really hadn't expected to completely smash updating. Is there anything > > > Instead of changing the order of packages in the config map, you could have > created a map which contains the new version of Morphic (which contains the > method), but still the previous version of Graphics (which also has the > method). So when that update map is fully processed, the method is still in > the image (in 2 packages). The method will be removed from Graphics, when > the updater loads the newer version of it. > >> I could have done before pushing to trunk to prevent this? > > > Yes. This is how we used to do it: > 1) upload the package which you want to contain the method (in this case > Morphic) > 2) create a new update map (containting the latest version of all packages > as usual) > 3) upload the package which you don't want to contain the method (in this > case Graphics) > > This way you don't have to tweak the update map. Thanks. This is more "how do I do this when I know it'll smash things up" when I was asking more "how can I know that this will smash things up". But perhaps "do it whenever you move a method between packages" is a good enough heuristic to avoid most pain points. frank > Levente > >> >> frank >> >> > |
On Wed, 24 Apr 2013, Frank Shearar wrote:
> On 24 April 2013 16:47, Levente Uzonyi <[hidden email]> wrote: >> On Tue, 23 Apr 2013, Frank Shearar wrote: >> >>> >>> I've pushed out a new config map, update-fbs.231, which loads Morphic >>> before Graphics, thus ensuring that there's always a #asGrafPort in >>> the image. I still don't like that Cog sprang a leak there, but at >>> least things are back on track. >>> >>> All I'd wanted to do was move a method from one package to another: I >>> really hadn't expected to completely smash updating. Is there anything >> >> >> Instead of changing the order of packages in the config map, you could have >> created a map which contains the new version of Morphic (which contains the >> method), but still the previous version of Graphics (which also has the >> method). So when that update map is fully processed, the method is still in >> the image (in 2 packages). The method will be removed from Graphics, when >> the updater loads the newer version of it. >> >>> I could have done before pushing to trunk to prevent this? >> >> >> Yes. This is how we used to do it: >> 1) upload the package which you want to contain the method (in this case >> Morphic) >> 2) create a new update map (containting the latest version of all packages >> as usual) >> 3) upload the package which you don't want to contain the method (in this >> case Graphics) >> >> This way you don't have to tweak the update map. > > Thanks. This is more "how do I do this when I know it'll smash things > up" when I was asking more "how can I know that this will smash things > up". But perhaps "do it whenever you move a method between packages" > is a good enough heuristic to avoid most pain points. Indeed. If you care about people who try to keep updating their long forked Trunk-based images, then this can help them a lot. Levente > > frank > >> Levente >> >>> >>> frank >>> >>> >> > > |
In reply to this post by Frank Shearar-3
On Wed, Apr 24, 2013 at 10:40 AM, Frank Shearar <[hidden email]> wrote:
Yes. Two things. One is to not attempt to produce a stack back-trace while the system is GCing (but that's new infrastructure to set some flags during GC, check them afterwards and perform the postponed activities; gahhh). The second is to (perhaps) add some infinite recursion checking e.g. when memory grows.
What's the pointer to that. I only found graphics-install-crash.zip in my inbox
best, Eliot
|
Free forum by Nabble | Edit this page |