[squeak-dev] The Inbox: Kernel-jar.1469.mcz

commits at source.squeak.org commits at source.squeak.org
Sun May 29 13:37:24 UTC 2022

A new version of Kernel was added to project The Inbox:

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

Name: Kernel-jar.1469
Author: jar
Time: 29 May 2022, 3:37:20.04666 pm
UUID: 9b7abd4f-b901-db43-961d-55abbca84437
Ancestors: Kernel-jar.1468

Oops, slight change in #terminate, the rest of Kernel-jar.1468 is unchanged.

=============== Diff against Kernel-jar.1468 ===============

Item was changed:
  ----- Method: Process>>terminate (in category 'changing process state') -----
  	"Stop the process that the receiver represents forever.
  	 Unwind to execute pending #ensure:/#ifCurtailed: blocks before terminating;
  	 allow all unwind blocks to run; if they are currently in progress, let them finish.
  	 If the process is in the middle of a #critical: critical section, release it properly."
  	"This is the kind of behavior we expect when terminating a healthy process.
  	 See further comments in #terminateAggressively and #destroy methods dealing 
  	 with process termination when closing the debugger or after a catastrophic failure."
  	"If terminating the active process, create a parallel stack and run unwinds from there;
  	 if terminating a suspended process, again, create a parallel stack for the process being
  	 terminated and resume the suspended process to complete its termination from the new
  	 parallel stack. Use a priority higher than the active priority to make the process that
  	 invoked the termination wait for its completion."
  	"If terminating a suspended process (including runnable and blocked), always suspend
  	 the terminating process first so it doesn't accidentally get woken up. Equally important is
  	 the side effect of the suspension; In 2022 a new suspend semantics has been introduced:
  	 the revised #suspend backs up a process waiting on a conditional variable to the send that
  	 invoked the wait state, while the pre-2022 #suspend simply removed the process from
  	 the conditional variable's list it was previously waiting on; see Process>>suspend comments.
  	 Execute the termination in the ensure argument block to ensure it completes even if the 
  	 terminator process itself gets terminated before it's finished; see testTerminateInTerminate."
  	| context |
  	self isActiveProcess ifTrue: [
  		context := thisContext.
  		^[context unwindTo: nil. self suspend] asContext jump].
  	[] ensure: [ 
  		self suspendAndReleaseCriticalSection.
  		context := suspendedContext ifNil: [^self].
  		suspendedContext := [context unwindTo: nil. self suspend] asContext.
+ 		self priority: (Processor activePriority + 1 min: Processor highestPriority); resume]!
- 		self priority: Processor activePriority + 1; resume]!

More information about the Squeak-dev mailing list