[#28509] Rational — Tadayoshi Funaba <tadf@...>

ふなばです。

49 messages 2006/04/05
[#28510] Re: Rational — keiju@... (石塚圭樹) 2006/04/05

けいじゅ@いしつかです.

[#28512] Re: Rational — Tadayoshi Funaba <tadf@...> 2006/04/05

ふなばです。

[#28513] Re: Rational — Shin-ichiro HARA <sinara@...> 2006/04/05

原です。

[#28514] Re: Rational — keiju@... (石塚圭樹) 2006/04/05

けいじゅ@いしつかです.

[#28517] Re: Rational — Yukihiro Matsumoto <matz@...> 2006/04/06

まつもと ゆきひろです

[#28520] Re: Rational — keiju@... (石塚圭樹) 2006/04/06

けいじゅ@いしつかです.

[#28521] Re: Rational — Yukihiro Matsumoto <matz@...> 2006/04/06

まつもと ゆきひろです

[#28525] Re: Rational — keiju@... (石塚圭樹) 2006/04/06

けいじゅ@いしつかです.

[#28527] Re: Rational — Shin-ichiro HARA <sinara@...> 2006/04/06

原です。

[#28536] Re: Rational — Shin-ichiro HARA <sinara@...> 2006/04/10

原です。

[#28537] Re: Rational — keiju@... (石塚圭樹) 2006/04/10

けいじゅ@いしつかです.

[#28589] Float#div and Float#divmod [AGAIN] — Shin-ichiro HARA <sinara@...>

原です。

16 messages 2006/04/23

[ruby-dev:28600] IO.popen raise Errno::EBADF

From: とみたまさひろ <tommy@...>
Date: 2006-04-24 15:18:41 UTC
List: ruby-dev #28600
とみたです。

IO.popen() で fork に失敗した時のエラーが EBADF になることがあります。

~% ruby -v
ruby 1.8.4 (2005-12-24) [i686-linux]
~% ruby -e '"1"*1024*1024*500; IO.popen("cat","w")'
-e:1:in `popen': Bad file descriptor - cat (Errno::EBADF)
        from -e:1

strace の結果はこんな感じ。

25722 pipe([3, 4])                      = 0
25722 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7e1c0c8) = -1 ENOMEM (Cannot allocate memory)
25722 close(-1081300760)                = -1 EBADF (Bad file descriptor)
25722 close(4)                          = 0

ということで、おそらくこんな感じではないかと。

--- io.c.orig   2005-12-20 02:11:20.000000000 +0900
+++ io.c        2006-04-24 23:49:48.000000000 +0900
@@ -2994,7 +2994,14 @@
            rb_thread_sleep(1);
            goto retry;
        }
-       close(pr[0]); close(pw[1]);
+       if ((modef & FMODE_READABLE)) {
+         close(pr[0]);
+         close(pr[1]);
+       }
+       if ((modef & FMODE_WRITABLE)) {
+         close(pw[0]);
+         close(pw[1]);
+       }
        rb_sys_fail(pname);
        break;
 

-- 
とみたまさひろ <tommy@tmtm.org>
3469 42CC 4D32 F53C AD98  65A5 8C37 FF09 69C1 6040

In This Thread

Prev Next