ruby-trunk-changes r31954 - r31957

今日は Mac OS XNetBSD などの環境での Fiber の利用が不正メモリエラーを引き起こす不具合の修正がありました。
今日は 100% 自作自演。内容が分かってるぶん楽ですね。

nagachika:r31954 2011-06-08 21:50:03 +0900

Mac OS X で test_fiber.rb を実行すると時々 SEGV や無限ループらしい動作になる不具合の修正です。 Fiber を作るとその Thread の root Fiber というのがその時点で作成されるのですが、その status の初期値が FIBER_USE_NATIVE が off(0) の時に RUNNING に設定されていませんでした。cont_mark() ではその Fiber に保存されたマシンスタックは Fiber が RUNNING の時だけ mark するようになっているので、FIBER_USE_NATIVE が有効でないプラットフォーム(Mac OS X, NetBSD 等)では mark 漏れによる不正なオブジェクト解放の可能性がありました。[ruby-core:36735] [Bug #4827]
ちなみに Fiber.new で新しく作る Fiber の status は CREATED で、最初に resume した時に RUNNING になりますが、root Fiber の場合は作成される時点でその Thread は動作しているわけなので最初から RUNNING になります。

svn:r31955 2011-06-08 21:50:07 +0900

version.h の日付更新。

nagachika:r31956 2011-06-08 21:52:31 +0900

ChangeLog にチケットの参照を入れ忘れていたので追加。

nagachika:r31957 2011-06-08 21:57:29 +0900

ChangeLogtypo 修正だけです。