VM crash, reproducible, involving 15-Puzzle 1-1.1
Andreas Raab
andreas.raab at gmx.de
Wed Jan 10 16:13:33 UTC 2007
Nice analysis but there is really only one problem: By changing the
metaclass structure 3.9 breaks all projects that use eToys scripting.
This is a well-known problem and has really nothing to do with the level
of stability claimed for the project at SqueakMap - none of the projects
that were made for <3.9 will work in 3.9 proper if they involve scripting.
Cheers,
- Andreas
John Ersatznom wrote:
> Despite: "Maturity level/Rock solid - Useable and hasn't had bugs for a
> long time."
>
> The following occurs reproducibly on a bog-standard winXPSP2 box:
>
> * Install Squeak3.9-final-7067
> * Install squeak-dev-72-2
> * Launch squeak-dev-72-2.image
> * World menu -> old desktop menu -> open ... -> SqueakMap Package Loader
> * Select 15-Puzzle (-> 1.1)
> * Menu -> first two items are "install" and "email package maintainers"
> * Latter produces the "gaelli@" email address I'm copying this to
> * Former produces "error occurred during install". Puzzle appears anyway
> * Scramble and unscramble puzzle works normally
> * World menu -> old desktop menu -> previous project returns to main
> world
> * There a debugger can be seen. Bug report below. Upshot: seems a
> Player56 instance's scripts ivar is ending up an integer instead of an
> IdentityDictionary.
> * Open a system browser and find some method. Pick senders of. Pick a
> method. Witness "primitive failed" debugger.
> * Cause is a corrupt CompiledMethod object; senders grovels over all
> compiled methods in the system. This particular CompiledMethod object
> is for Player57's setEmptyCell: method.
> * Yes -- that would be *your* Player57 class, Gaelli. :)
> * To recover normal behavior, unloading the "1415 Puzzle" world seems
> called-for. X the window and get another attempt to invoke an
> IdentityDictionary method on a SmallInteger.
> * Do a little digging and discover that Player56 can have its "scripts"
> ivar reset with jettisonScripts
> * Open an inspector on the Player56 instance causing all the trouble and
> eval "self jettisonScripts"
> * The icing on the cake: clicking the "1415 Puzzle" world window to try
> again to close it now crashes the VM(!).
>
> At least 4 separate bugs here.
> * In 15-Puzzle 1.1: package install/startup constructs a Player56 with
> an integer in place of an IdentityDictionary in "scripts" ivar (ivar
> defined in superclass Player).
> * Somehow, this causes a corrupt CompiledMethod for
> Player57>>setEmptyCell: to exist. Curiously, a normal version coexists
> with it! I suspect this is a VM error involving a dangling pointer.
> This may in turn indicate a Slang-to-C translator error.
> * In VM, something that causes a crash. It is probably the same or
> another dangling pointer.
> * In system tools: a single corrupt CompiledMethod makes "senders of"
> functionality useless. No failover. ("Proceed" causes the same corrupt
> method to keep popping up errors, apparently in an infinite loop.)
> In the particular case caused by the 15 puzzle, the CompiledMethod
> ends up with a "numLiterals" of zero (the proximate cause of the
> primitive failure) and a class that is an integer instead of a Class,
> FWIW. In any event, the system tools should provide some ability to
> recover, perhaps by ignoring or logging corrupt methods.
>
> 15 puzzle bug (generated bug report for the error during install):
>
> 10 January 2007 2:52:02 am
>
> VM: Win32 - a SmalltalkImage
> Image: Squeak3.9 [latest update: #7067]
>
> SecurityManager state:
> Restricted: false
> FileAccess: true
> SocketAccess: true
> Working Dir C:\squeak
> Trusted Dir C:\squeak\HP_Administrator
> Untrusted Dir C:\My Squeak\HP_Administrator
>
> SmallInteger(Object)>>doesNotUnderstand: #removeKey:ifAbsent:
> Receiver: 89276551
> Arguments and temporary variables:
> aMessage: removeKey: nil ifAbsent: [] in Player56
> class(Player class)>>cleanseS...etc...
> Receiver's instance variables:
> 89276551
>
> Player56 class(Player class)>>cleanseScriptsOfNilKeys
> Receiver: Player56
> Arguments and temporary variables:
>
> Receiver's instance variables:
> superclass: Player
> methodDict: a MethodDictionary(#moveNumber->a CompiledMethod
> (1619) )
> format: 136
> instanceVariables: nil
> organization: ('scripts' moveNumber)
>
> subclasses: nil
> name: #Player56
> classPool: nil
> sharedPools: nil
> environment: a SystemDictionary(lots of globals)
> category: #UserObjects
> traitComposition: an IdentityDictionary(#moveNumber->A
> UniclassScript - selecto...etc...
> localSelectors: an IdentityDictionary()
> scripts: <<error during printing>>
>
> Player56 class(Player class)>>scripts
> Receiver: Player56
> Arguments and temporary variables:
>
> Receiver's instance variables:
> superclass: Player
> methodDict: a MethodDictionary(#moveNumber->a CompiledMethod
> (1619) )
> format: 136
> instanceVariables: nil
> organization: ('scripts' moveNumber)
>
> subclasses: nil
> name: #Player56
> classPool: nil
> sharedPools: nil
> environment: a SystemDictionary(lots of globals)
> category: #UserObjects
> traitComposition: an IdentityDictionary(#moveNumber->A
> UniclassScript - selecto...etc...
> localSelectors: an IdentityDictionary()
> scripts: <<error during printing>>
>
> Player56(Player)>>methodInterfacesForScriptsCategoryIn:
> Receiver: a Player56 (3795) named Cell16
> Arguments and temporary variables:
> aVocabulary: an EToyVocabulary named "eToy"
> myScripts: nil
> us: nil
> Receiver's instance variables:
> dependents: nil
> costume: a PasteUpMorph<Cell16>(2009)
> costumes: nil
>
>
> --- The full stack ---
> SmallInteger(Object)>>doesNotUnderstand: #removeKey:ifAbsent:
> Player56 class(Player class)>>cleanseScriptsOfNilKeys
> Player56 class(Player class)>>scripts
> Player56(Player)>>methodInterfacesForScriptsCategoryIn:
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> Player56(Object)>>methodInterfacesForCategory:inVocabulary:limitClass:
> Player56(Object)>>tilePhrasesForCategory:inViewer:
> CategoryViewer>>categoryWording:
> CategoryViewer>>chosenCategorySymbol:
> CategoryViewer>>chooseCategoryWhoseTranslatedWordingIs:
> CategoryViewer>>initializeFor:categoryChoice:
> StandardViewer>>categoryViewerFor:
> StandardViewer>>addCategoryViewerFor:atEnd:
> StandardViewer>>addCategoryViewerFor:
> StandardViewer>>addCategoryViewer
> StandardViewer>>initializeFor:barHeight:includeDismissButton:showCategories:
>
> StandardViewer>>initializeFor:barHeight:includeDismissButton:
> StandardViewer>>initializeFor:barHeight:
> Presenter>>viewMorph:
> ViewerFlapTab>>unhibernate
> ViewerFlapTab(FlapTab)>>adaptToWorld
> [] in PasteUpMorph>>installFlaps {[:aFlapTab | aFlapTab adaptToWorld]}
> OrderedCollection>>do:
> PasteUpMorph>>installFlaps
> PasteUpMorph>>install
> Project>>enter:revert:saveForRevert:
> Project>>enter
> ProjectEntryNotification>>defaultAction
> UndefinedObject>>handleSignal:
> MethodContext(ContextPart)>>handleSignal:
> MethodContext(ContextPart)>>handleSignal:
> MethodContext(ContextPart)>>handleSignal:
> MethodContext(ContextPart)>>handleSignal:
> MethodContext(ContextPart)>>handleSignal:
> ProjectEntryNotification(Exception)>>signal
> ProjectEntryNotification(Exception)>>signal:
> ProjectEntryNotification class>>signal:
> ProjectLoading class>>openName:stream:fromDirectory:withProjectView:
> [] in ProjectLoading class>>openFromDirectory:andFileName:
> {[ProgressNotification signal: '1:foundMostRecent'. fileAndDir := self
> bestA...]}
> BlockContext>>on:do:
> [] in ComplexProgressIndicator>>withProgressDo: {[aBlock on:
> ProgressInitiationException do: [:ex | ex sendNotificati...]}
> BlockContext>>on:do:
> ComplexProgressIndicator>>withProgressDo:
> ProjectLoading class>>openFromDirectory:andFileName:
> [] in SMProjectInstaller>>install {[ProjectLoading openFromDirectory:
> dir andFileName: fileName]}
> ...etc...
>
>
>
> The VM crash log curiously indicates the VM version to be quite a bit
> earlier than 3.9. Possible there's a mismatch between squeak-dev and
> squeak? I downloaded the latest of both, after determining that
> squeak-dev by itself was not a complete Squeak install. In fact, there's
> an even more embarrassing fifth bug -- install just Squeak 3.9 7067
> directly from the zip to any directory, drag the 7067 image into the
> executable, click Workspace, and click "SMLoader open" in Workspace --
> guess what? SmallInteger doesNotUnderstand: #numbers ... is there a
> pattern here? Everything seems to boil down to SmallIntegers in places
> where they don't belong. I'm starting to suspect that the system is
> mistaking object pointers for integers and integers for object pointers
> here and there. That would explain everything, including the VM crashes.
> It would also betray a serious lack of testing and polish, unless it's a
> weird system-dependent bug, but Squeak should be well tested on x86 boxen.
>
> FWIW, system specs are:
> CPU: AMD64 dual-core XP2000
> OS: Windows XP MCE, 32-bit, SP2
> Video: eVGA -> nVidia GeForce GS6800
> Sound: some generic POS, not actually exercised in the occurring of
> these crashes
> Memory: about 3/4 of 1GB in use and 1/4 free according to Task Manager
> Disk: about 2/5 of 250GB free
>
> Version of Squeak downloaded was Win32 (I didn't see a win64 one anyway,
> not that it would likely have worked).
>
> Log from an instance of the VM crash:
>
> ---------------------------------------------------------------------
> Wed Jan 10 02:38:50 2007
>
> Exception code: C0000005
> Exception addr: 00412165
> Access violation (read access) at 054DFFC8
> EAX:054DFFC8 EBX:0267441C ECX:026795C4 EDX:00000000
> ESI:005203F0 EDI:018DED7C EBP:0006FC50 ESP:0006FC1C
> EIP:00412165 EFL:00010212
> FP Control: FFFF037F
> FP Status: FFFF4020
> FP Tag: FFFFFFFF
> VM Version: Squeak 3.7.1 (release) from Sep 23 2004
> Compiler: gcc 2.95.2 19991024 (release)
>
> Current byte code: 209
> Primitive index: 77
>
> Loaded plugins:
> DSAPrims 23 September 2004 (i)
> ZipPlugin 23 September 2004 (i)
> SocketPlugin 23 September 2004 (i)
> LargeIntegers v1.3 23 September 2004 (i)
> Matrix2x3Plugin 23 September 2004 (i)
> FloatArrayPlugin 23 September 2004 (i)
> B2DPlugin 23 September 2004 (i)
> BitBltPlugin 23 September 2004 (i)
> SecurityPlugin 23 September 2004 (i)
> FilePlugin 23 September 2004 (i)
> MiscPrimitivePlugin 23 September 2004 (i)
>
>
> Stack dump:
>
> 53568028 Behavior>allInstancesDo:
> 53567116 Behavior>allSubInstancesDo:
> 53567684 [] in Project>enter:revert:saveForRevert:
> 53566956 Dictionary>at:ifPresentAndInMemory:
> 48568348 Project>enter:revert:saveForRevert:
> 48569980 ProjectViewMorph>enter
> 48569888 ProjectViewMorph>mouseUp:
> 48569756 Morph>handleMouseUp:
> 48569664 MouseButtonEvent>sentTo:
> 48569572 Morph>handleEvent:
> 48569204 Morph>handleFocusEvent:
> 48569296 [] in HandMorph>sendFocusEvent:to:clear:
> 48569388 [] in PasteUpMorph>becomeActiveDuring:
> 48569112 BlockContext>on:do:
> 48569020 PasteUpMorph>becomeActiveDuring:
> 48568836 HandMorph>sendFocusEvent:to:clear:
> 48568744 HandMorph>sendEvent:focus:clear:
> 48568652 HandMorph>sendMouseEvent:
> 48568256 HandMorph>handleEvent:
> 48567936 HandMorph>processEvents
> 48568028 [] in WorldState>doOneCycleNowFor:
> 48567844 SequenceableCollection>do:
> 48567752 WorldState>handsDo:
> 48567660 WorldState>doOneCycleNowFor:
> 48567568 WorldState>doOneCycleFor:
> 48567476 PasteUpMorph>doOneCycle
> 48216052 [] in >spawnNewProcess
> 48216236 [] in BlockContext>newProcess
>
> ---------------------------------------------------------------------
> Wed Jan 10 03:02:09 2007
>
> Exception code: C0000005
> Exception addr: 00427242
> Access violation (read access) at 15797480
> EAX:0ABCBA40 EBX:81BF3194 ECX:026C99E0 EDX:026CD798
> ESI:00001378 EDI:00520580 EBP:00520580 ESP:0006FB64
> EIP:00427242 EFL:00010202
> FP Control: FFFF037F
> FP Status: FFFF0120
> FP Tag: FFFFFFFF
> VM Version: Squeak 3.7.1 (release) from Sep 23 2004
> Compiler: gcc 2.95.2 19991024 (release)
>
> Current byte code: 46
> Primitive index: 71
>
> Loaded plugins:
> SocketPlugin 23 September 2004 (i)
> ZipPlugin 23 September 2004 (i)
> DSAPrims 23 September 2004 (i)
> LargeIntegers v1.3 23 September 2004 (i)
> Matrix2x3Plugin 23 September 2004 (i)
> FloatArrayPlugin 23 September 2004 (i)
> B2DPlugin 23 September 2004 (i)
> BitBltPlugin 23 September 2004 (i)
> SecurityPlugin 23 September 2004 (i)
> FilePlugin 23 September 2004 (i)
> MiscPrimitivePlugin 23 September 2004 (i)
>
>
> Stack dump:
>
>
>
>
More information about the Squeak-dev
mailing list
|