ruby-trunk-changes r32510 - r32517

1.9.3 のブランチが切られて trunk が 1.9.4 になったということで、シグナル処理の方針変更のコミットがありました。

kosaki:r32510 2011-07-11 02:04:40 +0900

シグナルマスクの戦略変更の修正です。これまで CRuby はタイーマースレッドのみがシグナルを受信してシグナルハンドラを実行し(SIGSEGV とタイマースレッドから各ユーザースレッドへの通知用に利用される SIGVTALRM は例外)、シグナルハンドラ内で受信シグナルを溜めておいてタイマースレッドがメインスレッドへシグナルを配送するという「意図」になっていて、タイマースレッド以外はシグナルマスクがかけれられている「はず」でした。しかし実際には不具合があってシグナルマスクは外れてしまっていて、どのスレッドでもシグナルハンドラが実行されている状態になっていました。
現在のシグナルハンドラ内の操作は atomic な変数の increment と pipe 書き込みによるタイマースレッドへの通知になっていて、複数のスレッドでシグナルを受信しても問題なくなっているので、逆にこれまでの設計をやめて全てのスレッドがシグナルマスクを外してシグナルハンドラを実行できるようにしています。 [ruby-dev:43571] [Bug #4765]

kanemoto:r32511 2011-07-11 05:39:35 +0900

AIX での Fiber のスタックアドレスの計算を修正しています。 AIX で pthread_getthrds_np() で取得できるアドレスも base address のようで size を加算して開始位置にしています。 [Bug #1813]

usa:r32512 2011-07-11 15:03:41 +0900

r32433 で rb_num2ull() を独自処理に変更した時に Fixnum の処理に FIX2ULONG() を利用していたのを FIX2LONG() を使ってから LONG_LONG にキャストするように再修正しています。多分ですが -1 をわざと渡して 0xffffffffffffffff を作るというような呼び方をするためではないかという気がします。最上位ビットが1のような数が表現できない……と一瞬思いますがそういう数は Fixnum で表現できないので Bignum になっているはずです。

usa:r32513 2011-07-11 15:16:39 +0900

r32512 の修正の理由について ChangeLog に追記しています。 LLP64(long long とポインタが 64bit の環境)で ObjectSpace._id2ref を使う時に問題があったそうです。

kosaki:r32515 2011-07-11 15:56:06 +0900

r32510 の変更で process.c の signal() という関数マクロは不要になったので定義を削除しています。

ryan:r32517 2011-07-11 18:56:55 +0900

docs/NEWS-1.9.3 に minitest のバージョンアップを追記しています。