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.