The Trunk: ST80-mt.248.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: ST80-mt.248.mcz

commits-2
Marcel Taeumel uploaded a new version of ST80 to project The Trunk:
http://source.squeak.org/trunk/ST80-mt.248.mcz

==================== Summary ====================

Name: ST80-mt.248
Author: mt
Time: 25 February 2020, 3:12:26.773399 pm
UUID: 17a7a172-a0e4-fa46-89c9-da27f537f779
Ancestors: ST80-mt.247

Fixes an issue with debugging a process at hand, which is used when entering MVC as recovery for Morphic. Example: "[ 3 + 4 ] newProcess debug".

After this fix, the strange re-draw glitches are gone. BUT, the debugger opens only after, for example, opening the world menu once. That's related to #addDeferredUIMessage: and not having the right controller at hand in #enterForEmergencyRecovery. Not that important for 5.3.

=============== Diff against ST80-mt.247 ===============

Item was changed:
  ----- Method: MVCDebugger class>>openOn:context:label:contents:fullView: (in category 'opening') -----
  openOn: processToDebug context: context label: title contents: contentsStringOrNil fullView: full
  "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."
 
  | debugger cm ac acp wasActive |
  cm := Project current world. "controller manager"
  ac := cm activeController.
  acp := cm activeControllerProcess. "the ui process"
  wasActive := cm inActiveControllerProcess.
 
  debugger := self new
  process: processToDebug
  "Keep track of the controller if it matches."
  controller: (acp == processToDebug ifTrue: [ac])
  context: context.
 
  full
  ifTrue: [debugger openFullNoSuspendLabel: title]
  ifFalse: [debugger openNotifierNoSuspendContents: contentsStringOrNil label: title].
 
  "Try drawing the debugger tool at least once to avoid freeze."
  Project current restoreDisplay.
 
+ "If we are in a helper process, #openNoTerminate WILL NOT activate the debugger's controller. Example: user-interrupt request (cmd+dot)."
- "If we are in a helper process, #openNoTerminate WILL NOT activate the debugger's controller."
  (acp == processToDebug and: [wasActive not])
  ifTrue: [ [cm searchForActiveController] fork ].
 
+ "Be sure to suspend the process we want to debug now."
  processToDebug suspend.
+
+ "If we are NOT in a helper process, #openNoTerminate WILL NOT terminate the active controller's process."
+ (acp ~~ processToDebug and: [wasActive])
+ ifTrue: [ Processor terminateActive ].
 
  "Get here only if active process is not the process-to-debug. Use helper process if you want to access this return value."
  ^ debugger!