[squeak-dev] The Trunk: Morphic-mt.1113.mcz
Chris Muller
asqueaker at gmail.com
Mon Apr 18 22:30:28 UTC 2016
Hi Marcel, it goes to Emergency Evaluator even when it doesn't lock up
too, but I think this is worth it if it saves the lock up cases; EE is
certainly better. How should this interplay with the big red X
approach that Morphic uses?
On Sun, Apr 17, 2016 at 10:44 AM, <commits at source.squeak.org> wrote:
> Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
> http://source.squeak.org/trunk/Morphic-mt.1113.mcz
>
> ==================== Summary ====================
>
> Name: Morphic-mt.1113
> Author: mt
> Time: 17 April 2016, 5:44:23.036117 pm
> UUID: 1b36a4fb-13d9-f04f-8552-4048b9ac0439
> Ancestors: Morphic-mt.1112
>
> Improves robustness when facing erroneous drawing code that affects the debugger GUI. In that case, show primitive REPL instead of freezing the image.
>
> Note that there will soon be more code to recover from such serious errors.
>
> =============== Diff against Morphic-mt.1112 ===============
>
> Item was changed:
> ----- Method: Debugger class>>morphicOpenOn:context:label:contents:fullView: (in category '*Morphic-opening') -----
> + morphicOpenOn: process context: context label: title contents: contentsStringOrNil fullView: full
> - morphicOpenOn: process context: context label: title contents: contentsStringOrNil fullView: bool
> "Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger."
>
> | errorWasInUIProcess debugger |
> + ErrorRecursion ifTrue: [
> + "self assert: process == Project current uiProcess -- DOCUMENTATION ONLY"
> + ErrorRecursion := false.
> + ^ Project current handleFatalDrawingError: title].
> +
> + [ErrorRecursion not & Preferences logDebuggerStackToFile
> - errorWasInUIProcess := Project current spawnNewProcessIfThisIsUI: process.
> - [Preferences logDebuggerStackToFile
> ifTrue: [Smalltalk logSqueakError: title inContext: context]] on: Error do: [:ex | ex return: nil].
> +
> + ErrorRecursion := true.
> +
> + errorWasInUIProcess := Project current spawnNewProcessIfThisIsUI: process.
> +
> + "Schedule debugging in deferred UI message because
> + 1) If process is the current UI process, it is already broken.
> + 2) If process is some other process, it must not execute UI code"
> + Project current addDeferredUIMessage: [
> + debugger := self new process: process controller: nil context: context.
> + full
> + ifTrue: [debugger openFullNoSuspendLabel: title]
> + ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title].
> + debugger errorWasInUIProcess: errorWasInUIProcess.
> +
> + "Try drawing the debugger tool at least once to avoid freeze."
> + ActiveWorld displayWorldSafely.
> +
> + ErrorRecursion := false.
> - WorldState addDeferredUIMessage: [
> - "schedule debugger in deferred UI message to address redraw
> - problems after opening a debugger e.g. from the testrunner."
> - [
> - debugger := self new process: process controller: nil context: context.
> - bool
> - ifTrue: [debugger openFullNoSuspendLabel: title]
> - ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title].
> - debugger errorWasInUIProcess: errorWasInUIProcess.
> - ] on: Error do: [:ex |
> - self primitiveError:
> - 'Original error: ',
> - title asString, '.
> - Debugger error: ',
> - ([ex description] on: Error do: ['a ', ex class printString]), ':'
> - ]
> ].
> process suspend.
> !
>
>
More information about the Squeak-dev
mailing list
|