[squeak-dev] The Trunk: Kernel-ct.1436.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Dec 17 00:18:49 UTC 2021

Christoph Thiede uploaded a new version of Kernel to project The Trunk:

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

Name: Kernel-ct.1436
Author: ct
Time: 17 December 2021, 1:18:45.256987 am
UUID: 404a8e30-7b34-a841-9575-60fd6ad98d06
Ancestors: Kernel-mt.1435

Fixes a typo.

=============== Diff against Kernel-mt.1435 ===============

Item was changed:
  ----- Method: Process>>terminateAggressively (in category 'changing process state') -----
+ 	"Stop the receiver forever.
- 	"Stop the receiver represents forever.
  	Run all unwind contexts (#ensure:/#ifCurtailed: blocks) on the stack that have not yet been started. If the process is in the middle of an unwind block, then that unwind block will not be completed, but subsequent unwind blocks will be run. If even those unwind contexts should be continued, send #terminate instead.
  	Note that ill unwind contexts are theoretically able to stall the termination (for instance, by placing a non-local return in an unwind block); however, this is a disrecommended practice.
  	If the process is in the middle of a critical: critical section, release it properly."
  	| oldList bottom tombstone |
  	self isActiveProcess ifTrue: [
  		"If terminating the active process, suspend it first and terminate it as a suspended process."
  		[self terminate] fork.
  		^self suspend].
  	"Always suspend the process first so it doesn't accidentally get woken up.
  	N.B.: If oldList is a LinkedList then the process is runnable. If it is a Semaphore/Mutex et al., then the process is blocked."
  	oldList := self suspend.
  	suspendedContext ifNil: [^ self "Process is already terminated"].
  	"Release any method marked with the <criticalSection> pragma. The argument is whether the process is runnable."
  	self releaseCriticalSection: (oldList isNil or: [oldList class == LinkedList]).
  	bottom := suspendedContext bottomContext.
  	tombstone := bottom insertSender: [self suspend "terminated"] asContext.
  	suspendedContext := self
  		activateReturn: bottom
  		value: nil.
  	self complete: tombstone ifError: [:ex |
  		suspendedContext privRefresh. "Restart the handler context of UnhandledError so that when the receiver is resumed, its #defaultAction will be reached. See implementation details in #runUntilErrorOrReturnFrom:."
  		"We're not yet done, resume the receiver to spawn a new debugger on the error."
  		self resume].!

More information about the Squeak-dev mailing list