[#45703] test_advise failure on GNU/Linux — Tanaka Akira <tanaka.akira@...>

今朝、気がついたのですが、手元で test_advise が失敗します。

11 messages 2012/06/05
[#45705] Re: test_advise failure on GNU/Linux — KOSAKI Motohiro <kosaki.motohiro@...> 2012/06/06

小崎です

[#45735] [ruby-trunk - Feature #6587][Open] proposal: adding new methods File.rootname and Pathname#rootname — "usa (Usaku NAKAMURA)" <usa@...>

14 messages 2012/06/14

[#45745] Re: [ruby-changes:24028] yugui:r36079 (trunk): Embedding CRuby interpreter without internal headers has been difficult — SASADA Koichi <ko1@...>

見逃していました.

19 messages 2012/06/14
[#45747] Re: [ruby-changes:24028] yugui:r36079 (trunk): Embedding CRuby interpreter without internal headers has been difficult — Yugui <yugui@...> 2012/06/15

2012/6/15 SASADA Koichi <ko1@atdot.net>:

[#45748] Re: [ruby-changes:24028] yugui:r36079 (trunk): Embedding CRuby interpreter without internal headers has been difficult — SASADA Koichi <ko1@...> 2012/06/15

 ささだです.

[#45794] :new_pgroup and :pgroup option for spawn. — Tanaka Akira <akr@...>

process.c で気がついたのですが、spawn に Windows 用の :new_pgroup というオプションが

12 messages 2012/06/23
[#45800] Re: :new_pgroup and :pgroup option for spawn. — "U.Nakamura" <usa@...> 2012/06/25

こんにちは、なかむら(う)です。

[#45818] [ruby-trunk - Feature #6643][Open] io.seek(off, :end) — "akr (Akira Tanaka)" <akr@...>

30 messages 2012/06/25

[ruby-dev:45714] Re: [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい

From: Tanaka Akira <akr@...>
Date: 2012-06-09 03:30:11 UTC
List: ruby-dev #45714
2012年5月17日 18:21 Tanaka Akira <akr@fsij.org>:

> バッファがあると、読みすぎることがあるのではないでしょうか。
>
> 読みすぎたぶんを捨ててしまうと、
> marshal したデータが複数並んでいるものを読み込む場合に、
> 動作しなくなってしまうと思います。

> 個人的に最近作っている tb というもので、この動作を利用しているので、
> 気になるところです。

気がついたので記録のために書いておきますが、marshal の load が読みすぎないという
性質を process.c でも利用しているようです。

rb_fork_err で、子プロセスの例外を marshal で読み出し、次に errno を読み出し、
エラーメッセージを読み出す、というようなことをやっています。

        if ((read(ep[0], &state, sizeof(state))) == sizeof(state) && state) {
            io = rb_io_fdopen(ep[0], O_RDONLY|O_BINARY, NULL);
            exc = rb_marshal_load(io);
            rb_set_errinfo(exc);
        }
#define READ_FROM_CHILD(ptr, len) \
        (NIL_P(io) ? read(ep[0], (ptr), (len)) : rb_io_bufread(io,
(ptr), (len)))
        if ((size = READ_FROM_CHILD(&err, sizeof(err))) < 0) {
            err = errno;
        }
        if (size == sizeof(err) &&
            errmsg && 0 < errmsg_buflen) {
            ssize_t ret = READ_FROM_CHILD(errmsg, errmsg_buflen-1);
            if (0 <= ret) {
                errmsg[ret] = '\0';
            }
        }

のあたりです。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread