[squeak-dev] The Trunk: Tools-ct.1092.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Dec 16 01:38:48 UTC 2021
Christoph Thiede uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-ct.1092.mcz
==================== Summary ====================
Name: Tools-ct.1092
Author: ct
Time: 16 December 2021, 2:27:47.069664 am
UUID: 7a02fd08-61c8-a34c-a5f1-f7b62b68b12b
Ancestors: Tools-ct.1091
Complements Kernel-ct.1434 (revised termination modi on Process). Connects the debugger's Abandon button to new #terminateAggressively to restore the old semantics known from 2020/Squeak 5.3 and older). Provides menu items for alternative termination modi in the debugger (window menu) and in the process browser (press shift to #destroy a process).
Details: Improves robustness of clean-ups in Debugger during closing. Improves multilingual support in ProcessBrowser.
=============== Diff against Tools-ct.1091 ===============
Item was added:
+ ----- Method: Debugger>>addModelItemsToWindowMenu: (in category 'misc') -----
+ addModelItemsToWindowMenu: aMenu
+
+ super addModelItemsToWindowMenu: aMenu.
+
+ aMenu addLine.
+ aMenu
+ add: 'inspect process' translated target: self interruptedProcess action: #inspect;
+ add: 'explore process' translated target: self interruptedProcess action: #explore;
+ add: 'terminate process' translated target: self action: #terminateProcess;
+ balloonTextForLastItem: 'other than Abandon, this will allow the active context to unwind first.' translated.!
Item was added:
+ ----- Method: Debugger>>terminateProcess (in category 'context stack menu') -----
+ terminateProcess
+
+ interruptedProcess terminate.
+ interruptedProcess := nil.
+ self close.!
Item was changed:
----- Method: Debugger>>windowIsClosing (in category 'initialize') -----
windowIsClosing
"My window is being closed; clean up. Restart the low space watcher."
- interruptedProcess == nil ifTrue: [^ self].
- interruptedProcess terminate.
- interruptedProcess := nil.
-
contextStack := nil.
receiverInspector := nil.
contextVariablesInspector := nil.
+
+ interruptedProcess == nil ifTrue: [^ self].
+ interruptedProcess terminateAggressively.
+ interruptedProcess := nil.
+
+ Smalltalk installLowSpaceWatcher. "restart low space handler"!
- Smalltalk installLowSpaceWatcher. "restart low space handler"
- !
Item was added:
+ ----- Method: ProcessBrowser class>>destroyProcess: (in category 'process control') -----
+ destroyProcess: aProcess
+
+ aProcess ifNil: [^ self].
+
+ self suspendedProcesses
+ removeKey: aProcess
+ ifAbsent: [].
+ aProcess destroy.!
Item was changed:
----- Method: ProcessBrowser class>>terminateProcess: (in category 'process control') -----
terminateProcess: aProcess
+
+ ^ self terminateProcess: aProcess aggressively: false!
- aProcess ifNotNil: [
- self suspendedProcesses
- removeKey: aProcess
- ifAbsent: [].
- aProcess terminate
- ].
- !
Item was added:
+ ----- Method: ProcessBrowser class>>terminateProcess:aggressively: (in category 'process control') -----
+ terminateProcess: aProcess aggressively: aggressive
+
+ aProcess ifNil: [^ self].
+
+ self suspendedProcesses
+ removeKey: aProcess
+ ifAbsent: [].
+ aggressive
+ ifFalse: [aProcess terminate]
+ ifTrue: [aProcess terminateAggressively].!
Item was changed:
----- Method: ProcessBrowser>>buildWith: (in category 'toolbuilder') -----
buildWith: builder
"Create a pluggable version of me, answer a window"
| windowSpec listSpec textSpec |
windowSpec := builder pluggableWindowSpec new.
windowSpec model: self.
windowSpec label: 'Process Browser'.
windowSpec children: OrderedCollection new.
listSpec := builder pluggableListSpec new.
listSpec
model: self;
list: #processNameList;
getIndex: #processListIndex;
setIndex: #processListIndex:;
+ menu: #processListMenu:shifted:;
- menu: #processListMenu:;
keyPress: #processListKey:from:;
frame: (0 @ 0 extent: 0.5 @ 0.5).
windowSpec children add: listSpec.
listSpec := builder pluggableListSpec new.
listSpec
model: self;
list: #stackNameList;
getIndex: #stackListIndex;
setIndex: #stackListIndex:;
menu: #stackListMenu:;
keyPress: #stackListKey:from:;
frame: (0.5 @ 0.0 extent: 0.5 @ 0.5).
windowSpec children add: listSpec.
textSpec := builder pluggableTextSpec new.
textSpec
model: self;
getText: #selectedMethod;
setText: nil;
selection: nil;
menu: nil;
frame: (0 @ 0.5 corner: 1 @ 1).
windowSpec children add: textSpec.
^builder build: windowSpec!
Item was added:
+ ----- Method: ProcessBrowser>>destroyProcess (in category 'process actions') -----
+ destroyProcess
+
+ | nameAndRules |
+ nameAndRules := self nameAndRulesForSelectedProcess.
+ nameAndRules second ifFalse: [
+ ^ self inform: ('Nope, won''t destroy {1}' translated format: {nameAndRules first})].
+ self class destroyProcess: selectedProcess.
+ self updateProcessList.!
Item was changed:
----- Method: ProcessBrowser>>processListKey:from: (in category 'process list') -----
processListKey: aKey from: aView
aKey
caseOf: {
[$f] -> [^ self findContext].
[$g] -> [^ self nextContext].
[$a] -> [^ self toggleAutoUpdate].
[$u] -> [^ self updateProcessList] }
otherwise: [].
selectedProcess ifNil: [^ self changed: #flash].
^ aKey
caseOf: {
[$i] -> [self inspectProcess].
[$I] -> [self exploreProcess].
[$c] -> [self chasePointers].
[$P] -> [self inspectPointers].
[$t] -> [self terminateProcess].
+ [$T] -> [self terminateProcessAggressively].
[$r] -> [self resumeProcess].
[$s] -> [self suspendProcess].
[$d] -> [self debugProcess].
[$p] -> [self changePriority].
[$m] -> [self messageTally].
[$S] -> [self signalSemaphore].
[$k] -> [self fullStack]}
otherwise: [self arrowKey: aKey from: aView]!
Item was removed:
- ----- Method: ProcessBrowser>>processListMenu: (in category 'process list') -----
- processListMenu: menu
-
- selectedProcess ifNotNil:
- [:process|
- [:name :allowStop :allowDebug|
- menu addList: #(('inspect (i)' inspectProcess) ('explore (I)' exploreProcess) ('inspect Pointers (P)' inspectPointers)).
- (Smalltalk includesKey: #PointerFinder) ifTrue:
- [menu add: 'chase pointers (c)' action: #chasePointers].
- allowStop ifTrue:
- [menu add: 'terminate (t)' action: #terminateProcess.
- process isSuspended
- ifTrue: [menu add: 'resume (r)' action: #resumeProcess]
- ifFalse: [menu add: 'suspend (s)' action: #suspendProcess]].
- allowDebug ifTrue:
- [menu addList: #(('change priority (p)' changePriority) ('debug (d)' debugProcess))].
- menu add: 'profile messages (m)' action: #messageTally.
- (process suspendingList isKindOf: Semaphore) ifTrue:
- [menu add: 'signal Semaphore (S)' action: #signalSemaphore].
- menu addList: #(('full stack (k)' fullStack) ('copy stack to clipboard' copyProcessStackToClipboard)).
- menu addLine] valueWithArguments: (self nameAndRulesFor: process)].
-
- menu
- addList: #(#('find context... (f)' findContext) #('find again (g)' nextContext));
- addLine;
- add: (self isAutoUpdating
- ifTrue: ['turn off auto-update (a)']
- ifFalse: ['turn on auto-update (a)'])
- action: #toggleAutoUpdate;
- add: 'update list (u)' action: #updateProcessList.
-
- (Smalltalk at: #CPUWatcher ifAbsent: []) ifNotNil:
- [:pw|
- menu addLine.
- pw isMonitoring
- ifTrue: [menu add: 'stop CPUWatcher' action: #stopCPUWatcher]
- ifFalse: [menu add: 'start CPUWatcher' action: #startCPUWatcher]].
-
- ^menu!
Item was added:
+ ----- Method: ProcessBrowser>>processListMenu:shifted: (in category 'process list') -----
+ processListMenu: menu shifted: shifted
+
+ selectedProcess ifNotNil:
+ [:process|
+ [:name :allowStop :allowDebug|
+ menu addList: #(('inspect (i)' inspectProcess) ('explore (I)' exploreProcess) ('inspect Pointers (P)' inspectPointers)).
+ (Smalltalk includesKey: #PointerFinder) ifTrue:
+ [menu add: 'chase pointers (c)' translated action: #chasePointers].
+ menu addLine.
+ allowStop ifTrue:
+ [menu add: 'terminate (t)' translated action: #terminateProcess.
+ menu add: 'terminate aggressively (T)' translated action: #terminateProcessAggressively.
+ shifted ifTrue:
+ [menu
+ add: 'destroy' translated action: #destroyProcess;
+ balloonTextForLastItem: (Process firstCommentAt: #destroy)].
+ process isSuspended
+ ifTrue: [menu add: 'resume (r)' translated action: #resumeProcess]
+ ifFalse: [menu add: 'suspend (s)' translated action: #suspendProcess]].
+ allowDebug ifTrue:
+ [menu addList: #(('change priority (p)' changePriority) ('debug (d)' debugProcess))].
+ menu add: 'profile messages (m)' action: #messageTally.
+ (process suspendingList isKindOf: Semaphore) ifTrue:
+ [menu add: 'signal Semaphore (S)' translated action: #signalSemaphore].
+ menu addList: #(('full stack (k)' fullStack) ('copy stack to clipboard' copyProcessStackToClipboard)).
+ menu addLine] valueWithArguments: (self nameAndRulesFor: process)].
+
+ menu
+ addList: #(#('find context... (f)' findContext) #('find again (g)' nextContext));
+ addLine;
+ add: (self isAutoUpdating
+ ifTrue: ['turn off auto-update (a)' translated]
+ ifFalse: ['turn on auto-update (a)' translated])
+ action: #toggleAutoUpdate;
+ add: 'update list (u)' translated action: #updateProcessList.
+
+ (Smalltalk at: #CPUWatcher ifAbsent: []) ifNotNil:
+ [:pw|
+ menu addLine.
+ pw isMonitoring
+ ifTrue: [menu add: 'stop CPUWatcher' translated action: #stopCPUWatcher]
+ ifFalse: [menu add: 'start CPUWatcher' translated action: #startCPUWatcher]].
+
+ ^menu!
Item was changed:
----- Method: ProcessBrowser>>terminateProcess (in category 'process actions') -----
terminateProcess
+
+ ^ self terminateProcess: false!
- | nameAndRules |
- nameAndRules := self nameAndRulesForSelectedProcess.
- nameAndRules second
- ifFalse: [self inform: 'Nope, won''t kill ' , nameAndRules first.
- ^ self].
- self class terminateProcess: selectedProcess.
- self updateProcessList!
Item was added:
+ ----- Method: ProcessBrowser>>terminateProcess: (in category 'process actions') -----
+ terminateProcess: aggressive
+
+ | nameAndRules |
+ nameAndRules := self nameAndRulesForSelectedProcess.
+ nameAndRules second ifFalse: [
+ ^ self inform: ('Nope, won''t terminate {1}' translated format: {nameAndRules first})].
+ self class terminateProcess: selectedProcess aggressively: aggressive.
+ self updateProcessList.!
Item was added:
+ ----- Method: ProcessBrowser>>terminateProcessAggressively (in category 'process actions') -----
+ terminateProcessAggressively
+
+ ^ self terminateProcess: true!
More information about the Squeak-dev
mailing list
|