ruby-trunk-changes r40393 - r40402

今日は Tempfile.create というメソッドの新設と、マシンスタックオーバフローが2回目から SEGV する不具合の修正などがありました。

akr:r40393 2013-04-20 22:50:47 +0900

標準添付ライブラリ tempfile.rb に Tempfile.create というメソッドを新設しています。 Tempfile.new と違うのは、ブロックなして呼ばれた時に返るのが Tempfile オブジェクトではなく File オブジェクトであるということと、ブロックつきで呼ばれた時にメソッドから抜ける時に close だけでなく unlink もするという点です。 [ruby-dev:47220] [ruby-core:41478] [Feature #5707]

akr:r40395 2013-04-21 00:10:29 +0900

WEBrick の中で Tempfile を利用しているところで新設した Tempfile.create を利用するようにしています。 Tempfile.new だとこの用途ではメソッド内でファイルを明示的に削除しているのに、Tempfile オブジェクトが回収される時に finalizer で再度消そうとしてしまうので、全く同名のファイルができた時にそれを消してしまう可能性があるのを防ぐという意味も Tempfile.create にはあるようです。

svn:r40396 2013-04-21 00:10:35 +0900

version.h の日付更新。

akr:r40399 2013-04-21 00:16:24 +0900

r40393 で追加した Tempfile.create にブロックを渡して呼んだ時の後始末に close が漏れていたので追加しています。

akr:r40400 2013-04-21 08:03:52 +0900

test-all のテスト内で Tempfile を利用しているところで Tempfile.create を利用するように書き換えています。

hsbt:r40401 2013-04-21 19:04:54 +0900

misc/ruby-mode.el の obsolete な変数の利用をやめています。 https://github.com/ruby/ruby/pull/290

charliesome:r40402 2013-04-21 21:35:23 +0900

非常に多い演算子を含む式を parse しようとすると SEGV する不具合を回避しようとしています。正確には一度 SystemStackError が発生すると、次にマシンスタックオーバフローした時に例外発生でなく SEGV してしまうそうです。 setjmp(3) のかわりに sigsetjmp(3) を利用することでシグナルマスクや SS_ONSTACK といったフラグを復旧するようにしています。 [ruby-core:54175] [Bug #8254]
しかしこれはどうやら revert されそうな様子です。