2016-01-06 14:32 GMT+01:00 Denis Kudriashov <dionisi...@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.

Reply via email to