[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