Squeak 拾ってきたMonitor
monitor critical: [ monitor signal: #foo. ].
が動かないと書いたが、これはどうやら問題無いようだ。
私の勘違いでした。
すみません。
駄目なのは、
monitor critical: [ monitor critical: []. monitor signal: #foo. ].
でした。
monitorはcriticalブロックから抜ける時に、自らが保持していたプロセスに関する情報をクリアしているために、
二度目のcritical:から抜けた時点で、自分が自分自身の最初のcriticalによって保護されているということを見失っているように見受けられる。
で、エラー。
monitor critical: [ monitor critical: []. monitor critical: [ monitor signal: #foo. ]. ].
にすると少なくともエラーは出なくなる。
が、中を見てみると、どうもこの場合にはプロセスに対してアンセーフなように見受けられる。
気のせいだろうか。
criticalブロックの深さを記録するような実装にすると解決するのかもしれない。