[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24071] Re: Zlib::GzipReader#readpartial

From: Tanaka Akira <akr@...17n.org>
Date: 2004-08-13 09:55:45 UTC
List: ruby-dev #24071
In article <873c2rqsrw.fsf@serein.a02.aist.go.jp>,
  Tanaka Akira <akr@m17n.org> writes:

> というわけで、その次は Zlib::GzipReader#readpartial を次のように追加す
> るのはどうでしょうか。

あ、説明するのを忘れましたが、このパッチには、
Zlib::GzipReader#readpartial を追加する他に、wrap される IO からデータ
を読み込む時に readpartial を使うという変更も入っています。
NoMethodError になれば read を呼び出すので互換性の問題はほとんどないは
ずです。

これにより、

> % gzip -9 < eval.c | ./ruby -rzlib -e '
> STDOUT.sync = true
> r, w = IO.pipe
> w.sync = true
> ilen = 0
> Thread.new {
>   begin
>     loop {
>       w.print STDIN.sysread(1)
>       ilen += 1
>       Thread.pass
>     }
>   rescue EOFError
>   end
> }
> io = Zlib::GzipReader.new(r)
> begin
>   loop { p [ilen, io.readpartial(4096)] }
> rescue EOFError
> end
> '

というコードのように、パイプの向こうから 1byte しか送られていない場合
でも GzipReader は到着したぶんだけ読み込むことが出来て、伸長できたぶん
からユーザに返せるようになるわけです。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread