ruby-trunk-changes r43145 - r43149

今日は Process.fork 時にバックグラウンドの Thread が保持していた Mutex のロックを放棄するようにしてうっかりデッドロックしたりする事故を避けるようにする変更などがありました。

nobu:r43145 2013-10-05 09:18:54 +0900

sizes.c の自動生成のルールで依存関係に $(PREP) というのを追加しています。 $(PREP) は native なビルドか cross compile 時かで異なっていて、cross compile 時は miniruby をビルドしているシステム上で動かすことができないので、$(MINIRUBY) を使う時に依存するためのターゲットみたいです。 [ruby-core:57476] [Bug #8968]

svn:r43146 2013-10-05 09:18:58 +0900

version.h の日付更新。

nobu:r43147 2013-10-05 10:02:15 +0900

r43137 と r43145 の sizes.c の自動生成についての変更を revert して $(BASERUBY) で生成するように戻しています。

nobu:r43148 2013-10-05 11:21:12 +0900

fork 時に Thread が存在しているとメインスレッド以外は止められますが、それが Mutex の排他ロックを取得した状態だったらロックが解放されないままになって、その Mutex のロックを取得しようとするとデッドロックしていました。 Thread の強制停止時にロック取得している Mutex を解放しておくようにしています。これ、そういうものでしょうがないと思ってましたが解放できたんですね。もっとも MonitorMixin とか使ってると Mutex とは別の(というか Mutex と ConditionVariable を利用して作った)機構で排他処理してたりするのでそっちがデッドロックしてしまいますけど。まあでもそれは Ruby レベルなのでまだ救いはありますね。 [ruby-core:55102] [Bug #8433]

nobu:r43149 2013-10-05 11:21:17 +0900

r43148 の ChangeLog の時刻を修正しただけです。