ruby-trunk-changes r43672 - r43678

今日は callcc を Hash#each のブロック内で使った時の不具合の対応がありましたが、マルチスレッド時に問題があるので、現在 trunk は Hash をマルチスレッドで扱うと要素が追加できないなどおかしな現象がおきる可能性があります。

zzak:r43672 2013-11-14 01:12:32 +0900

拡張ライブラリ bigdecimalbigdecimal/util.rb で追加される Rational#to_d の rdoc コメントの synopsis から引数なしで呼ぶ方式を削除しています。 r43669 の続きですね。まだサンプルコードに……。

zzak:r43673 2013-11-14 02:37:47 +0900

拡張ライブラリ thread の rdoc コメントをクラス名などを RDoc に伝えるためのコメントアウトされた rb_define_class() などの追加やタグの記述の修正など。 [ruby-core:57681] [Bug #8988]

nobu:r43674 2013-11-14 11:33:50 +0900

Hash のイテレータ用の関数 foreach_safe_i() と hash_foreach_iter() に引数を追加してエラーを渡せるようにし、エラー時には ST_STOP で止めるようにしています。またこれまでエラーを渡す時以外に st.c で引数を渡していなかったのを 0 を明示的に渡すようにしています。

nobu:r43675 2013-11-14 11:35:40 +0900

Hash#each の終了時の rb_ensure() で実行される終了処理の hash_foreach_ensure() で、Hash のイテレーション中の要素追加などを抑制するためにイテレーションのネスト具合をカウントしている RHASH_ITER_LEV() の値をデクリメントしていたのを、単にデクリメントするのではなくてイテレーションに入る前に保存しておいた値に戻すようにしています。これは callcc で Hash#each のブロックの中の Continuation を作って再実行すると hash_foreach_ensure() を再実行してしまうためカウンタがダウンフローすることによる不具合を対応しているそうです。 Continuation ツラいですね…。これ、マルチスレッドの場合を考えるとこの方法も問題があるような気がします…。 [ruby-dev:47803] [Bug #9105]

akr:r43676 2013-11-14 19:58:15 +0900

拡張ライブラリ openssl のテストで auth_tag を作り直す時に String#succ を使っているせいで 16byte を越えてしまう可能性があってたまにテストが失敗するのを修正しています。 [ruby-core:55143] [Bug #8439]

ngoto:r43677 2013-11-14 20:40:15 +0900

r43460 の ATOMIC_SIZE_CAS() の変更で Solaris でビルドできなくなっていたのを修正しています。 atomic_cas_ulong() の引数の数を修正しています。

nagachika:r43678 2013-11-14 23:40:53 +0900

r43669 と r43672 の続きで拡張ライブラリ bigdecimalbigdecimal/util.rb の Rational#to_d の rdoc コメントから引数なしの Rational#to_d の呼び出しをしているサンプルコードを削りました。 [Bug #8958]