[squeak-dev] trouble with the new Mutex

Ben Coman btc at openinworld.com
Tue Nov 8 05:54:12 UTC 2016


On Tue, Nov 8, 2016 at 8:31 AM, Chris Muller <ma.chris.m at gmail.com> wrote:
> Hi Eliot, I noticed you revamped Mutex earlier this year, and I'm
> having an issue where they're stopped even though there are no other
> processes inside the critical block.  Those processes were background
> processes that ended up opening a debugger, which was closed.
>
> The Mutex is stuck and I have no internal "semaphore" I can signal
> anymore, it appears to be coupled straight to the VM (for better
> performance, I assume).
>
> Even when I restart the process in a frame totally above the method
> whcih even enters the #critical:, it still halts there.
>

What is the value of the 'owner' ivar of the Mutex?
To enter the critical section it needs to be nil.

Otherwise it will a Process you should check its not still in the #critical:
Then send #primitiveExitCriticalSection to the Mutex.
Try this experiement...

Transcript clear; show: Time now; cr.
m := Mutex new.
p1 := [m critical: [Transcript show: 1. p1 suspend]] newProcess priority:41.
p2 := [m critical: [Transcript show: 2]] newProcess priority:41.
p3 := [m critical: [Transcript show: 3]] newProcess priority:41.
p1 resume.
p2 resume.
p3 resume.
"observe only '1' is shown"
m primitiveExitCriticalSection.


It is strange for it to have gotten into that state. '2' and '3' are
always printed by this experiment...

Transcript clear; show: Time now; cr.
m := Mutex new.
p1 := [m critical: [Transcript show: 1. self halt]] newProcess priority:41.
p2 := [m critical: [Transcript show: 2]] newProcess priority:41.
p3 := [m critical: [Transcript show: 3]] newProcess priority:41.
p1 resume.
p2 resume.
p3 resume.

cheers -ben


More information about the Squeak-dev mailing list