Ok. slice 17340 in inbox. It is only touches current #critical: implementation. It is not about deprecation wrong semaphore usage

2016-01-07 9:55 GMT+01:00 Denis Kudriashov <dionisiydk@gmail.com>:

2016-01-07 0:15 GMT+01:00 Ben Coman <btc@openinworld.com>:

I'm not qualified to judge, but is sounds okay.�� I have an alternative
proposal to consider that hopefully might remove Semaphore handling
completely from Process>>terminate.

What if we have a wait primitive that instead of returning itself
(i.e. a Semaphore), it always returns true.�� ��Then if the process is
terminated while the primitive is waiting, before it consumes a
signal, the assignment to signalConsumed never occurs.�� Then we
have...

�� critical: mutuallyExcludedBlock
�� �� signalConsumed := false.
�� �� [
�� �� �� �� signalConsumed := self primWaitSucceeded.
�� �� �� �� blockValue := mutuallyExcludedBlock value
�� �� ] ensure: [ signalConsumed ifTrue: [self signal] ].
�� �� ^blockValue

It *feels* more atomic.�� Someone knowledgeable with the vm would need
to advise whether after the primitive wakes up and consumes a signal,
the assignment into signalConsumed can be guaranteed to occur before
the process gets a chance to terminate, even if the primitive needs to
directly poke the value into signalConsumed.

To me it is better too. But it requires changes in VM primitive which I'm can't provide.
So I will implement my idea. Do you ok with the name #waitIfInterrupted?