David T. Lewis uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-dtl.517.mcz==================== Summary ====================
Name: Kernel-dtl.517
Author: dtl
Time: 15 November 2010, 12:49:28.804 pm
UUID: 2c83e064-fa7d-4fc0-8e81-140b88e48a49
Ancestors: Kernel-ul.516
Revert last change to Semaphore>>critical:ifLocked: using latest version from Cuis, which adds a method comment to explain the reason for use of #== rather than #=
=============== Diff against Kernel-ul.516 ===============
Item was changed:
----- Method: Semaphore>>critical:ifLocked: (in category 'mutual exclusion') -----
critical: mutuallyExcludedBlock ifLocked: alternativeBlock
"Evaluate mutuallyExcludedBlock only if the receiver is not currently in
the process of running the critical: message. If the receiver is, evaluate
mutuallyExcludedBlock after the other critical: message is finished."
+ "Note: The following is tricky and depends on the fact that the VM will not switch between processes while executing byte codes (process switches happen only in real sends). The following test is written carefully so that it will result in bytecodes only.
+ Do not change the following #== for #=, as #== is not a real message send, just a bytecode."
+ excessSignals == 0 ifTrue: [
- "Note: The following is tricky and depends on the fact that the VM will not switch between processes while executing byte codes (process switches happen only in real sends). The following test is written carefully so that it will result in bytecodes only."
- excessSignals = 0 ifTrue:[
"If we come here, then the semaphore was locked when the test executed.
Evaluate the alternative block and answer its result."
^alternativeBlock value
].
^self critical: mutuallyExcludedBlock!