ruby-trunk-changes r31472 - r31488

今日はいろいろあったようで結果的にはあまり動きのない日でした。GW おつかれさまです。

kosaki:r31472 2011-05-08 05:21:38 +0900

r31470 で Windows 向けに IO.pipe を Socket.pair にした修正ですが、Linux では(Mac OS X でも) Socket.pair では AF_UNIXドメインのソケットしか作れないのでダメで、しかし Windows では AF_UNIX は使えない、ということで結局プラットフォームで使い分けないといけませんでした、ぐぬぬ

kosaki:r31473 2011-05-08 10:50:36 +0900

signal_thread_list を利用するかどうかの条件コンパイルをプラットフォームを基準にしていたのですが、一部条件が漏れてたりしていたので SIGVTALRM があるかどうかも含めて USE_SIGNAL_THREAD_LIST というフラグに集約しています。

kosaki:r31474 2011-05-08 10:54:58 +0900

add_signal_thread_list()/remove_signal_thread_list で xmalloc/xfree を用いて struct signal_thread_list を確保/解放するようにしています。
xmalloc は GC が走る可能性と、確保失敗時に例外が発生する可能性があるので、FGLOCK でロック取得中に例外発生すると signal_thread_list_lock を取りっぱなしになってしまう危険がありそうです。まあ malloc が失敗しても FATAL で強制終了なんですけど。

tadf:r31476 2011-05-08 16:58:11 +0900

date_core.c で GREGORIAN というマクロ(Float::INFINITY を取得して double に変換して負にしている)と同じ値を用いているところをマクロを利用するようにしています。

tadf:r31477 2011-05-08 17:06:40 +0900

Date::Format._httpdate でタイムゾーンgmt にマッチさせた条件で offset の計算するのに zone_to_diff に "gmt" を渡していたところは 0固定でいいので 呼び出すのをやめて 0 にしています。

tadf:r31478 2011-05-08 17:18:10 +0900

date のテストで skip を return にしたのをまた skip にされてます。
このなかで Calendar というのに依存しているテストがあるんですけど、ruby 本体には calendar というライブラリは見当らないんですよね。gem でしょうか。だったら gem のテストにすべきだと思うんですが……。

kosaki:r31479 2011-05-08 17:52:25 +0900

r31474 は FGLOCK のブロック中で xmalloc で例外が発生するとまずいということで revert されています。

tadf:r31480 2011-05-08 18:41:38 +0900

date で文字の判定や String オブジェクト生成など何度か現れている処理をマクロ化しています。

tadf:r31481 2011-05-08 19:08:12 +0900

Time#xmlschema の引数 fraction_digits に負の値が指定された時も 0 を指定された時と同様に小数点以下の秒数を結果の文字列に出力しないようにしています。

kosaki:r31482 2011-05-08 19:46:27 +0900

pthread_cond_timedwait() から EINTR でかえってきた時にリトライする処理を native_cond_timedwait() に入れて、thread_timer() で EINTR を処理していた所は削除しています。
コード中のコメントによると pthread_cond_timedwait() は POSIX によれば EINTR を返すことはないのですが、昔の Linux だと EINTR を返すことがあるのだそうです。
Linux の環境を使えないので確認できないのですが、EINTR で返るような環境ではリトライしてしまうと sleep で寝ている Thread へ signal 受信時に割り込みをかけて起こすことができなくなったりしないでしょうか? Mac OS X だとシグナル飛ばすと 0 で返るのですぐ起きましたけど。

naruse:r31483 2011-05-08 20:15:23 +0900

r31478 の date のテストを skip に戻していたものを黙って return に戻して(revert して)います。改めて、skip は「今後直す予定」の時で環境依存や外部ライブラリに依存しているものは無言で飛ばすと。

tadf:r31484 2011-05-08 20:33:41 +0900

と、また revert (date のテストの skip 復活)。

tadf:r31485 2011-05-08 20:38:25 +0900

で更に r31432 を revert? 実際には revert ではなくて calendar に依存しているテストは黙って return にする修正は残されてます。

tadf:r31486 2011-05-08 20:56:32 +0900

結局 skip していた date の test のテストケースは全て無条件に黙って return になっています。

tadf:r31487 2011-05-08 21:01:59 +0900

r31486 でコメントアウトが足りなかった部分を修正。

tadf:r31488 2011-05-08 21:03:50 +0900

Complex と Rational のテストでも skip していたところを return にしています。しかし Complex も Rational も組み込みクラスなので消してもいいような。