[#34647] fork 不可能な環境での test_argv0_noarg — wanabe <s.wanabe@...>

ワナベと申します。

13 messages 2008/05/11
[#34667] Re: fork 不可能な環境での test_argv0_noarg — Yukihiro Matsumoto <matz@...> 2008/05/13

まつもと ゆきひろです

[#34742] Ruby 1.8.7-preview3 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.7-preview3 をリリースしました。

14 messages 2008/05/18
[#34744] Re: [ruby-list:44957] Ruby 1.8.7-preview3 has been released — Takahiro Kambe <taca@...> 2008/05/19

お疲れ様です。

[#34800] Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...>

木村です。

18 messages 2008/05/22
[#34801] Re: Windows2000上でtrunkがビルドできない — "U.Nakamura" <usa@...> 2008/05/22

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

[#34824] Re: Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...> 2008/05/23

木村です。

[#34850] Re: Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...> 2008/05/26

木村です。

[#34854] Re: Windows2000上でtrunkがビルドできない — "U.Nakamura" <usa@...> 2008/05/26

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

[#34889] Ruby 1.8.7-preview4 test-all failed in OpenSSL::TestSSL — Nobuhiro IMAI <nov@...>

いまいです。

10 messages 2008/05/29

[ruby-dev:34595] スレッド中の IO#flush で表示が乱れる

From: wanabe <s.wanabe@...>
Date: 2008-05-05 07:44:45 UTC
List: ruby-dev #34595
ワナベと申します。

スレッド中で文字数が PIPE_BUF の2倍以上の文字列を
IO#flush した場合、文字列が途切れることがあります。
また同様に文字数が PIPE_BUF 以上の文字列では
出力に余分な文字列がつくことがあります。
きちんと適宜 flush をしてくれる端末では再現しません。

具体的には、以下のようなスクリプトで起こりえます。

Thread.new do
  print " "*2047 + "foo"
  STDOUT.flush
  print "."*1025
  STDOUT.flush
end
sleep 0.1

PIPE_BUF == 1024 の手元の環境(Mingw + MSYS + rxvt)では
空白列、foo、ドット列といった出力を得るはずが
空白列、f、ドット列、空白列、fという出力になってしまいます。

再現する端末が少ないと思い、長めに説明させていただきました。
くどくなってしまい申し訳ありません。パッチは短いです。

Index: io.c
===================================================================
--- io.c	(revision 16278)
+++ io.c	(working copy)
@@ -584,8 +584,8 @@
         return 0;
     }
     if (0 <= r) {
-        fptr->wbuf_off = r;
-        fptr->wbuf_len = r;
+        fptr->wbuf_off += r;
+        fptr->wbuf_len -= r;
         errno = EAGAIN;
     }
     if (rb_io_wait_writable(fptr->fd)) {


-- 
ワナベ

In This Thread

Prev Next