[#24698] NKF(nkf2)を1.8ブランチに入れました — "NARUSE, Yui" <naruse@...>

naruseです。

14 messages 2004/11/03
[#24734] Re: NKF(nkf2)を1.8ブランチに入れました — 堀川 久 <vzw00011@...> 2004/11/06

こんにちは。

[#24720] メール関係ライブラリの標準添付について — MoonWolf <moonwolf@...>

MoonWolfです。

17 messages 2004/11/05
[#24721] Re: メール関係ライブラリの標準添付について — Yukihiro Matsumoto <matz@...> 2004/11/05

まつもと ゆきひろです

[#24722] Re: メール関係ライブラリの標準添付について — MoonWolf <moonwolf@...> 2004/11/05

MoonWolfです。

[#24804] Re: まつもとさんの負担を減らすために、何ができるだろう — "URABE Shyouhei aka.mput" <root@...>

mput です。 ruby-dev に移動します。

21 messages 2004/11/13
[#24805] Re: まつもとさんの負担を減らすために、何ができるだろう — Tanaka Akira <akr@...17n.org> 2004/11/13

In article <2D6284E3-351D-11D9-B7EF-000393735AAE@mput.dip.jp>,

[#24806] Re: まつもとさんの負担を減らすために、何ができるだろう — "URABE Shyouhei aka.mput" <root@...> 2004/11/13

mput です。

[#24808] Re: まつもとさんの負担を減らすために、何ができるだろう — Masayoshi Takahashi <maki@...> 2004/11/13

高橋征義です。

[#24809] Re: まつもとさんの負担を減らすために、何ができるだろう — "URABE Shyouhei aka.mput" <root@...> 2004/11/13

mput です。

[#24834] Process.getrlimit and Process.setrlimit — Tanaka Akira <akr@...17n.org>

Process.getrlimit と Process.setrlimit が欲しいので実装してみました。

25 messages 2004/11/13

[#24965] sync and stdio buffering — Tanaka Akira <akr@...17n.org>

ちょっとした思いつきなのですが、

12 messages 2004/11/26

[#24993] rb_io_sysread dumps core [BUG] rb_sys_fail() - errno == 0 — Tietew <tietew-ml-ruby-dev@...>

ソケットとスレッドを大量に使うアプリ(具体的には IRCbot です)を

13 messages 2004/11/29

[#25003] IO#flush dumps core again — Tanaka Akira <akr@...17n.org>

次のようにすると core を吐きます。

28 messages 2004/11/30
[#25004] Re: IO#flush dumps core again — nobu@... 2004/11/30

なかだです。

[#25005] Re: IO#flush dumps core again — Yukihiro Matsumoto <matz@...> 2004/11/30

まつもと ゆきひろです

[#25009] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/01

In article <1101836040.635395.27476.nullmailer@x31.priv.netlab.jp>,

[#25014] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/01

In article <1101878558.979715.1359.nullmailer@x31.priv.netlab.jp>,

[#25015] Re: IO#flush dumps core again — Yukihiro Matsumoto <matz@...> 2004/12/01

まつもと ゆきひろです

[#25056] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/05

In article <1101888165.570792.4192.nullmailer@x31.priv.netlab.jp>,

[#25074] Re: IO#flush dumps core again — Tanaka Akira <akr@...17n.org> 2004/12/06

In article <1102293033.356112.2288.nullmailer@x31.priv.netlab.jp>,

[ruby-dev:24965] sync and stdio buffering

From: Tanaka Akira <akr@...17n.org>
Date: 2004-11-26 17:58:10 UTC
List: ruby-dev #24965
ちょっとした思いつきなのですが、

Index: io.c
===================================================================
RCS file: /src/ruby/io.c,v
retrieving revision 1.330
diff -u -p -r1.330 io.c
--- io.c	26 Nov 2004 06:27:45 -0000	1.330
+++ io.c	26 Nov 2004 17:33:27 -0000
@@ -2728,6 +2728,7 @@ rb_io_synchronized(fptr)
     OpenFile *fptr;
 {
     fptr->mode |= FMODE_SYNC;
+    setvbuf(GetWriteFile(fptr), NULL, _IONBF, 0);
 }
 
 void

というかんじで、sync なときには stdio の buffering を行わないようにす
るのはどうでしょうか。

その狙いは

% ruby -rfcntl -e '
r, w = IO.pipe
pid = fork {
  w.close
  sleep 1
  puts r.read
}
r.close
w.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
w.write "x" * 4098
w.write "y"
w.close
Process.wait pid'|od -c
0000000   x   x   x   x   x   x   x   x   x   x   x   x   x   x   x   x
*
0010000   y  \n
0010002

という、nonblocking write におけるデータの蒸発を (sync なときに限り)
避けるというものです。

パッチを当てない状況では上記のように 4098個の x を書き込んだにも関わら
ず 4096個しか出て来ませんが、パッチを当てると

% ./ruby -rfcntl -e '
r, w = IO.pipe
pid = fork {
  w.close
  sleep 1
  puts r.read
}
r.close
w.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
w.write "x" * 4098
w.write "y"
w.close
Process.wait pid'|od -c
0000000   x   x   x   x   x   x   x   x   x   x   x   x   x   x   x   x
*
0010000   x   x   y  \n
0010004

というように、書き込んだ 4098個すべてが出て来ます。

このようにデータの蒸発が避けられる理由は、stdio レベルのバッファリング
がなくなるために、EAGAIN が fflush でなく fwrite で起き、rb_io_fwrite
がちゃんと EAGAIN でループするようになるというものです。

ただし、このパッチには (少なくとも) つぎの問題があります。

* setvbuf は fopen (や fdopen) 直後にしか呼び出してはいけないのに
  pipe_open 中から orig_stdout と orig_stderr に対して呼び出してしまう
* IO#sync= で false にしてもバッファリングしなくなってしまう

というわけで、上記のパッチそのものはあまりうまくないような感じもします
が、こういうアイデアはどんなものでしょうか?
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next