From: wanabe <s.wanabe@...> Date: 2008-07-24T23:42:57+09:00 Subject: [ruby-dev:35648] [Bug:1.9] MingwでIO#dupがブロックする ワナベと申します。 ruby-list に送った不具合を改めてこちらにも書かせていただきます。 Mingw 上の trunkで、test/ruby/test_io.rb の test_dup のように パイプを最大まで作成してから IOオブジェクトの dup を繰り返すと 処理が停止します。 $ ./ruby -ve ' a = [] loop{a.push IO.pipe} rescue nil loop {a.push(p a[0][0].dup)}' ruby 1.9.0 (2008-07-24 revision 18196) [i386-mingw32] #<IO:0xbbdbe0> # ここで処理が止まる また以下の結果から、msvcrt の問題のように思えます。 $ cat test.c #include <stdio.h> #include <io.h> int main(int argc, char **argv) { int n = 0; while(_dup(0) != -1) n++; printf("n = %i\n", n); _dup(0); printf("fin\n"); return 0; } $ gcc -mno-cygwin test.c && ./a.exe n = 2045 // ← CTRL+C で中断するまで処理が止まる $ gcc -mno-cygwin test.c -lmsvcr71 && ./a.exe n = 2045 fin -- ワナベ