ruby-trunk-changes r33001 - r33009

今日は Net::IMAP の不具合修正などがありました。

shugo:r33001 2011-08-19 11:32:59 +0900

IMAP でサーバからのレスポンスに ')' の前に空白があるとパースエラーになっていたので、空白を許容するように修正しています。 [ruby-core:38820] [Bug #5163]

svn:r33002 2011-08-19 11:33:02 +0900

version.h の日付更新。

mrkn:r33005 2011-08-19 13:17:04 +0900

select(2) に使う fdset について、Mac OS X 10.7 (Lion) では _DARWIN_UNLIMITED_SELECT が(または _DARWIN_C_SOURCE が定義されていれば _DARING_UNLIMITED_SELECT も定義される)定義されていないと FD_SET_SIZE よりも多い fd が渡されると select(2) が errno = EINVAL でエラーを返すという注意をコメントに追記しています。
参考URL: http://developer.apple.com/library/mac/#releasenotes/Darwin/SymbolVariantsRelNotes/_index.html

mrkn:r33006 2011-08-19 13:20:10 +0900

そして configure で target_os が darwin の時には _DARWIN_UNLIMITED_SELECT を定義するようにしています。

shugo:r33007 2011-08-19 14:16:20 +0900

Net::IMAP で受信スレッドが停止した時に Net::IMAP#idle から抜けてこなくなるので、停止を検出して Net::IMAP::Error 例外を発生させるようにしています。 [ruby-core:38930] [Bug #5190]

nobu:r33009 2011-08-19 14:25:52 +0900

Process.spawn などの実装で、fork(2) がなくて spawnv(2) が利用可能な時は spawnv() を利用するようになっていますが、その第1引数が P_WAIT で子プロセスの終了を待つようになっていたので P_NOWAIT に変更してすぐに処理が返ってくるようにしています。spawnv() を使う環境ではテストされてなかったようですね。また spawnv() に失敗するとコマンドも含めて引数を "/bin/sh" の引数として渡して再実行しようとしますが、これを errno == ENOEXEC でエラーになった時だけリトライするようにしています。