[#44586] [Ruby 1.9 - Bug #5423][Open] readlineの入力待機中に端末のウィンドウサイズ変更すると入力内容が乱れる — Takuto Matsuu <matsuu@...>

8 messages 2011/10/08

[#44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 — Makoto Kishimoto <redmine@...>

21 messages 2011/10/09

[#44604] Ruby 2.0 release plan — "NARUSE, Yui" <naruse@...>

ささださんが既にいくつか 2.0 関連のメールを投げていらっしゃいますが、

75 messages 2011/10/18
[#44607] Re: Ruby 2.0 release plan — Yukihiro Matsumoto <matz@...> 2011/10/18

まつもと ゆきひろです

[#44618] Re: Ruby 2.0 release plan — "NARUSE, Yui" <naruse@...> 2011/10/18

(2011/10/18 16:15), Yukihiro Matsumoto wrote:

[#44619] Re: Ruby 2.0 release plan — Yukihiro Matsumoto <matz@...> 2011/10/18

まつもと ゆきひろです

[#44627] Re: Ruby 2.0 release plan — Urabe Shyouhei <shyouhei@...> 2011/10/19

On 10/18/2011 10:16 PM, Yukihiro Matsumoto wrote:

[#44629] Re: Ruby 2.0 release plan — Yukihiro Matsumoto <matz@...> 2011/10/19

まつもと ゆきひろです

[#44631] Re: Ruby 2.0 release plan — Urabe Shyouhei <shyouhei@...> 2011/10/19

たとえば2.0の次のバージョン番号はどうしますか?

[#44633] Re: Ruby 2.0 release plan — "NARUSE, Yui" <naruse@...> 2011/10/20

2011年10月20日3:31 Urabe Shyouhei <shyouhei@ruby-lang.org>:

[#44612] Re: Ruby 2.0 release plan — Yusuke Endoh <mame@...> 2011/10/18

遠藤です。

[#44707] [ruby-trunk - Feature #5512][Open] Integer#/ の改訂 — tadayoshi funaba <redmine@...>

13 messages 2011/10/30

[#44719] [ruby-trunk - Feature #5520][Open] Numeric#exact?、Numeric#inexact? の追加 — tadayoshi funaba <redmine@...>

13 messages 2011/10/31

[ruby-dev:44713] Re: [ruby-changes:21512] akr:r33561 (trunk): * configure.in: check dup3.

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2011-10-30 20:26:30 UTC
List: ruby-dev #44713
(ruby-devへ河岸をうつします)

> +#if defined(HAVE_DUP3) && defined(O_CLOEXEC)
> +    static int try_dup3 = 1;
> +    if (try_dup3) {
> +        ret = dup3(oldfd, newfd, O_CLOEXEC);
> +        /* dup3 is available since Linux 2.6.27. */
> +        if (ret == -1 && errno == ENOSYS) {
> +            try_dup3 = 0;
> +            ret = dup2(oldfd, newfd);
> +        }
> +    }
> +    else {
> +        ret = dup2(oldfd, newfd);
> +    }
> +#else
>     ret = dup2(oldfd, newfd);
> +#endif
>     if (ret == -1) return -1;
>     fd_set_cloexec(ret);
>     return ret;

akrさん、このコードなんですが、rb_cloexec_dup2(oldfd, newfd)のoldfdとnewfdが一致する可能性は
あるでしょうか?あるとしたら、どういう動作をすべきと意図しているAPIでしょうか?

といいますのも、さいきんglibcのメーリングリストでdup2とdup3とで oldfd == newfd のときの
仕様が異なっており、libcのdup2() が システムコールのdup3() を呼ぶようにしてしまったので、
regressionしたというバグが報告されています。

http://cygwin.com/ml/libc-alpha/2011-09/msg00061.html


いまのコードだと

 - dup3 がない
   dup2()がNOPになったあと、fd_set_cloexec()が呼ばれるのでCLOEXECがつく
 - dup3 がある
   dup3()でEINVALが返ってくるので return -1してしまい、 fd_set_cloexec()は呼ばれない

と動作が変わってしまうように見えます。自分で直そうかとも思ったのですが仕様がわからないので
投げてます。すいません。コメントいただけると助かります。


btw, めちゃくちゃ余談なんですが、dup3でEINVALにしてるのは本当にいい仕様なんですかねえ?

In This Thread

Prev Next