Brent, we are looking for Ruby to officially allow Thread.critical=3D to be=
 implemented as a single non-reentrant mutex. This would help convince peop=
le writing Ruby libraries in the future to use Thread.critical=3D without a=
ssuming that other threads will be descheduled. Otherwise, they can push ba=
ck on JRuby and IronRuby as not being fully-compatible.

The proposed spec I wrote up would clean things up even more. For example, =
you said "Thread.critical=3Dfalse exits the critical section, regardless of=
 how many times it had been been redundantly set true." However, consider t=
he case where thread A sets Thread.critical=3Dtrue, and then thread B does =
Thread.critical=3Dfalse. (Note that even MRI will schedule other threads un=
der certain circumstances like a newly created thread or if thread A does K=
ernel#sleep). In this case, you cannot force thread A to release the mutex.=
 Your wording could possibly still be supported, for example, by having thr=
ead B create a new mutex and publish that as the single non-reentrant mutex=
 to be used henceforth. I think such clean up would be good without causing=
 too much incompatilibiles.

However, we don't have to do all of these changes if compatability is a sig=
nificant concern. As long as descheduling of other threads was not a requir=
ement, that would go a long way.

Regards,
Shri