ささだです.

 Mutex および Thread#join によるデッドロックを,より精度よく検出する
パッチを書きました.

 これまでのデッドロック検出は,「ロックなどでブロックしているスレッドの
数」 == 「生きているスレッドの数」のとき,システム全体がロック状態である
ためデッドロックであると判断し,main thread に fatal を発生させていました.

 これを,デッドロックの定義通りに,例えば「Mutex m1,m2,m1 を保持して
いるスレッド t1,m2 を保持しているスレッド t2 があったとき,t1 が m2 を
要求して,さらに t2 が m1 を要求したとき,デッドロックと判定する」ように
なります.これまでのデッドロック検出では,このとき他のスレッドが走ってい
る場合は,生きているスレッド数がブロックしているスレッド数よりも多いた
め,デッドロックと検出されませんでした.

 余録として,現在とても難しい方法でデッドロック検出しているのですが,そ
の辺を素直に再実装したため,とても読みやすくなっていると思います.

以下,パッチ:
http://www.atdot.net/sp/readonly/o4wnml

 この変更は,これまでのスレッドの挙動を大分変えてしまうため,1.9.3 に入
れるのは難しいと思いますが,1.9.4 あたりで入るといいなぁ,と思っています.

 なお,性能ですが,VirtualBox 2仮想CPU上ではこれまでに比べて速くなった
んですが,実8CPUマシン上で動かしたら遅くなってしまいました.場合によって
は速くなると思ったんだけどなあ.性能的な観点から,やっぱり無し,ってのも
有りかと思います.

-- 
// SASADA Koichi at atdot dot net