2016-01-06 14:32 GMT+01:00 Denis Kudriashov <dionisiydk@gmail.com>:
Ok. I wrote MutextTests which show problems. See in attachment.��
Attached Mutex.st contains fix which suggest Ben for his scenario. But it broke other scenario.��

Mutex>>critical: aBlock
"Evaluate aBlock protected by the receiver."
| activeProcess signalRequired blockValue |
activeProcess := Processor activeProcess.
activeProcess == owner ifTrue:[^aBlock value].
signalRequired := false.
[
signalRequired := true.
semaphore wait.
owner:= activeProcess.
blockValue := aBlock value
] ensure: [signalRequired & (owner == activeProcess) ifTrue: [owner := nil. semaphore signal]].
^blockValue

My idea of ifCurtailed: usage not helps too. But if you change MutexTest to use Semaphore instead of Mutex then all tests will be green.

And I don't know how to fix it inside critical method.��