[#17881] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — nobu.nakada@...

なかだです。

14 messages 2002/08/02
[#17883] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — nobu.nakada@... 2002/08/02

なかだです。

[#17906] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — Takaaki Tateishi <ttate@...> 2002/08/03

At Fri, 2 Aug 2002 12:17:33 +0900,

[#17908] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17909] Re: [ruby-list:35696] Re: サブクラスのオブジェクト生成時に、スーパークラスの初期化を行うには ? — Takaaki Tateishi <ttate@...> 2002/08/03

At Sat, 3 Aug 2002 23:32:39 +0900,

[#17887] next parser (Re: parenthesize argument(s) for future version) — Minero Aoki <aamine@...>

あおきです。スレッド切ります。

18 messages 2002/08/02
[#17895] Re: next parser (Re: parenthesize argument(s) for future version) — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17898] Re: next parser (Re: parenthesize argument(s) for future version) — Minero Aoki <aamine@...> 2002/08/03

あおきです。

[#17904] Re: next parser (Re: parenthesize argument(s) for future version) — matz@... (Yukihiro Matsumoto) 2002/08/03

まつもと ゆきひろです

[#17920] Re: next parser (Re: parenthesize argument(s) for future version) — Minero Aoki <aamine@...> 2002/08/04

あおきです。

[#17933] Re: next parser (Re: parenthesize argument(s) for future version) — matz@... (Yukihiro Matsumoto) 2002/08/06

まつもと ゆきひろです

[#17889] ruby-bugs-ja incoming/277 — Takaaki Tateishi <ttate@...>

立石です.

15 messages 2002/08/02
[#17890] Re: ruby-bugs-ja incoming/277 — Takaaki Tateishi <ttate@...> 2002/08/02

At Sat, 3 Aug 2002 05:13:32 +0900,

[#17927] Re: import-module (Re: Re: scope-in-state) — keiju@... (石塚圭樹)

けいじゅ@日本ラショナルソフトウェアです.

13 messages 2002/08/05
[#17943] Re: import-module (Re: Re: scope-in-state) — Shin-ichiro HARA <sinara@...> 2002/08/06

原です。

[#17949] Re: import-module (Re: Re: scope-in-state) — keiju@... (石塚圭樹) 2002/08/06

けいじゅ@日本ラショナルソフトウェアです.

[#17955] Re: import-module (Re: Re: scope-in-state) — Shin-ichiro HARA <sinara@...> 2002/08/07

原です。

[#17954] Selection IPv4/IPv6 at TCPSocket — NISHI Takao <zophos@...9.com>

にし@おかやまです。

19 messages 2002/08/07
[#18120] Re: Selection IPv4/IPv6 at TCPSocket — "Akinori MUSHA" <knu@...> 2002/08/31

At Wed, 7 Aug 2002 13:23:37 +0900,

[#18121] Re: Selection IPv4/IPv6 at TCPSocket — GOTO Kentaro <gotoken@...> 2002/08/31

At Sun, 1 Sep 2002 03:31:01 +0900,

[#18127] Re: Selection IPv4/IPv6 at TCPSocket — "Akinori MUSHA" <knu@...> 2002/09/01

At Sun, 1 Sep 2002 04:00:33 +0900,

[#18128] Re: Selection IPv4/IPv6 at TCPSocket — "Akinori MUSHA" <knu@...> 2002/09/01

At Sun, 1 Sep 2002 12:37:05 +0900,

[#18130] Re: Selection IPv4/IPv6 at TCPSocket — GOTO Kentaro <gotoken@...> 2002/09/01

At Sun, 1 Sep 2002 13:00:46 +0900,

[#18131] Re: Selection IPv4/IPv6 at TCPSocket — Minero Aoki <aamine@...> 2002/09/01

あおきです。

[#17965] inferior-ruby-mode and irb — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

22 messages 2002/08/09
[#17971] Re: inferior-ruby-mode and irb — matz@... (Yukihiro Matsumoto) 2002/08/10

まつもと ゆきひろです

[#18008] Re: inferior-ruby-mode and irb — keiju@... (石塚圭樹) 2002/08/14

けいじゅ@日本ラショナルソフトウェアです.

[#17966] Hash has default block? — Tanaka Akira <akr@...17n.org>

ふと、ひさしぶりに(一年ぶりくらい?) AMarshal に手を入れていて気になっ

34 messages 2002/08/09
[#17967] Re: Hash has default block? — "K.Kosako" <kosako@...> 2002/08/09

Tanaka Akiraさんの<hvo8z3gnvr6.fsf@coulee.a02.aist.go.jp>から

[#17969] Re: Hash has default block? — Tanaka Akira <akr@...17n.org> 2002/08/09

In article <20020809121059.B6DC51560@helium.ruby-lang.org>,

[#17977] Re: Hash has default block? — "K.Kosako" <kosako@...> 2002/08/12

Tanaka Akiraさんの<hvo65yknitf.fsf@coulee.a02.aist.go.jp>から

[#17989] Re: Hash has default block? — Tanaka Akira <akr@...17n.org> 2002/08/13

In article <20020812052018.C7F9B1671@helium.ruby-lang.org>,

[#17990] Re: Hash has default block? — matz@... (Yukihiro Matsumoto) 2002/08/13

まつもと ゆきひろです

[#17991] Re: Hash has default block? — matz@... (Yukihiro Matsumoto) 2002/08/13

まつもと ゆきひろです

[#17998] Re: Hash has default block? — "K.Kosako" <kosako@...> 2002/08/13

Yukihiro Matsumotoさんの

[#17999] Re: Hash has default block? — Tanaka Akira <akr@...17n.org> 2002/08/13

In article <20020813075933.DBB611415@helium.ruby-lang.org>,

[#18000] Re: Hash has default block? — matz@... (Yukihiro Matsumoto) 2002/08/13

まつもと ゆきひろです

[#18004] allocation framework — Tanaka Akira <akr@...17n.org> 2002/08/13

In article <1029229143.399680.2549.nullmailer@picachu.netlab.jp>,

[#18021] Re: allocation framework — matz@... (Yukihiro Matsumoto) 2002/08/15

まつもと ゆきひろです

[#18022] Re: allocation framework — Tanaka Akira <akr@...17n.org> 2002/08/15

In article <1029423141.763951.25373.nullmailer@picachu.netlab.jp>,

[#18023] Re: allocation framework — matz@... (Yukihiro Matsumoto) 2002/08/16

まつもと ゆきひろです

[#18024] Re: allocation framework — Tanaka Akira <akr@...17n.org> 2002/08/16

In article <1029464034.601483.27585.nullmailer@picachu.netlab.jp>,

[#18074] source file name at -r option — nobu.nakada@...

なかだです。

30 messages 2002/08/24
[#18352] Re: source file name at -r option — nobu.nakada@... 2002/09/22

なかだです。

[#18662] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/11/06

なひです。

[#18663] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — nobu.nakada@... 2002/11/06

なかだです。

[#18667] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — matz@... (Yukihiro Matsumoto) 2002/11/06

まつもと ゆきひろです

[#18673] Re: ENABLE/DISABLE_TRACE (was Re: source file name at -r option) — nobu.nakada@... 2002/11/07

なかだです。

[#18076] Win32 signal, process etc — nobu.nakada@...

なかだです。

14 messages 2002/08/24

[#18103] autoload patch for ruby-1.7 — "Yoshinori K. Okuji" <okuji@...>

[ruby-dev:16180]でトップレベル以外の定数についてもautoloadができるよう

24 messages 2002/08/29
[#18132] Re: autoload patch for ruby-1.7 — Minero Aoki <aamine@...> 2002/09/01

あおきです。

[#18139] Re: autoload patch for ruby-1.7 — "Yoshinori K. Okuji" <okuji@...> 2002/09/01

At Sun, 1 Sep 2002 15:53:24 +0900,

[#18145] Re: autoload patch for ruby-1.7 — Minero Aoki <aamine@...> 2002/09/02

あおきです。

[#18109] mkmf.rb and extmk.rb — WATANABE Hirofumi <eban@...>

わたなべです。

24 messages 2002/08/30
[#18157] Re: mkmf.rb and extmk.rb — matz@... (Yukihiro Matsumoto) 2002/09/03

まつもと ゆきひろです

[#18159] Re: mkmf.rb and extmk.rb — WATANABE Hirofumi <eban@...> 2002/09/03

わたなべです。

[ruby-dev:17871] Re: non-blocking IO

From: nobu.nakada@...
Date: 2002-08-01 00:08:24 UTC
List: ruby-dev #17871
なかだです。

At Wed, 31 Jul 2002 22:44:28 +0900,
Yukihiro Matsumoto wrote:
> ということで、現時点での私の気持ちは
> 
>   * getsなど行指向入力はEWOULDBLOCKを無視
>   * read系はEWOULDBLOCKがきたらすでに読み込んだぶんを文字列
>     で返す。

すでに読み込んだぶんが0だったら単に空文字列ということでしょうか?

ZnZさんのブロックを使うという案もどうかなと思うのですが…。
<http://znz.s1.xrea.com/t/?date=20020731#p02>

それと、1.6で末尾にゴミがつきます。


Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.69.2.27
diff -u -2 -p -r1.69.2.27 io.c
--- io.c	20 May 2002 04:32:54 -0000	1.69.2.27
+++ io.c	31 Jul 2002 18:21:52 -0000
@@ -464,5 +464,5 @@ io_fread(ptr, len, f)
     int c;
 
-    while (n--) {
+    for (; n > 0; --n) {
 	if (!READ_DATA_PENDING(f)) {
 	    rb_thread_wait_fd(fileno(f));
@@ -474,7 +474,7 @@ io_fread(ptr, len, f)
 	    if (ferror(f)) {
 		if (errno == EINTR) continue;
-		if (errno == EAGAIN) return len - n;
+		if (errno == EAGAIN) break;
 #if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
-		if (errno == EWOULDBLOCK) return len - n;
+		if (errno == EWOULDBLOCK) break;
 #endif
 		return 0;
@@ -486,5 +486,5 @@ io_fread(ptr, len, f)
     }
 
-    return len - n - 1;
+    return len - n;
 }
 

Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.142
diff -u -2 -p -r1.142 io.c
--- io.c	28 Jun 2002 18:26:00 -0000	1.142
+++ io.c	31 Jul 2002 18:11:27 -0000
@@ -259,4 +259,24 @@ io_fflush(f, fptr)
 }
 
+void
+rb_io_wait_readable(f)
+    int f;
+{
+    fd_set rfds;
+    FD_ZERO(&rfds);
+    FD_SET(f, &rfds);
+    rb_thread_select(f + 1, &rfds, NULL, NULL, NULL);
+}
+
+void
+rb_io_wait_writable(f)
+    int f;
+{
+    fd_set wfds;
+    FD_ZERO(&wfds);
+    FD_SET(f, &wfds);
+    rb_thread_select(f + 1, NULL, &wfds, NULL, NULL);
+}
+
 /* writing functions */
 static VALUE
@@ -266,5 +286,6 @@ io_write(io, str)
     OpenFile *fptr;
     FILE *f;
-    long n;
+    long n, r;
+    register char *ptr;
 
     rb_secure(4);
@@ -282,21 +303,28 @@ io_write(io, str)
     f = GetWriteFile(fptr);
 
+    ptr = RSTRING(str)->ptr;
+    n = RSTRING(str)->len;
+    do {
 #ifdef __human68k__
-    {
-	register char *ptr = RSTRING(str)->ptr;
-	n = RSTRING(str)->len;
-	while (--n >= 0)
-	    if (fputc(*ptr++, f) == EOF)
-		break;
-	n = ptr - RSTRING(str)->ptr;
-    }
-    if (n != RSTRING(str)->len && ferror(f))
-	rb_sys_fail(fptr->path);
+	if (fputc(*ptr++, f) == EOF) {
+	    if (ferror(f)) rb_sys_fail(fptr->path);
+	    break;
+	}
+	--n;
 #else
-    n = fwrite(RSTRING(str)->ptr, 1, RSTRING(str)->len, f);
-    if (n != RSTRING(str)->len && ferror(f)) {
+	r = fwrite(ptr, 1, n, f);
+	if (r == n || !ferror(f)) break;
+#ifdef EWOULDBLOCK
+	if (errno == EWOULDBLOCK) {
+	    rb_io_wait_writable(fileno(f));
+	    ptr += r;
+	    n -= r;
+	    continue;
+	}
+#endif
 	rb_sys_fail(fptr->path);
-    }
 #endif
+    } while (n > 0);
+    n = ptr - RSTRING(str)->ptr;
     if (fptr->mode & FMODE_SYNC) {
 	io_fflush(f, fptr);
@@ -542,4 +570,24 @@ rb_io_to_io(io)
 
 /* reading functions */
+static void
+io_retryable(f, path)
+    FILE *f;
+    const char *path;
+{
+    switch (errno) {
+      case EAGAIN:
+#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
+      case EWOULDBLOCK:
+#endif
+	rb_io_wait_readable(fileno(f));
+	/* fall through */
+      case EINTR:
+	clearerr(f);
+	break;
+      default:
+	rb_sys_fail(path);
+	break;
+    }
+}
 
 static long
@@ -583,4 +631,5 @@ io_fread(ptr, len, f)
 		switch (errno) {
 		  case EINTR:
+		    clearerr(f);
 		    continue;
 		  case EAGAIN:
@@ -588,4 +637,5 @@ io_fread(ptr, len, f)
 		  case EWOULDBLOCK:
 #endif
+		    clearerr(f);
 #ifdef __BORLANDC__
 		  case EPIPE:
@@ -654,4 +704,5 @@ read_all(fptr, siz)
 	if (n == 0 && bytes == 0) {
 	    if (feof(fptr->f)) return Qnil;
+	    if (!ferror(fptr->f)) return rb_str_new(0, 0);
 	    rb_sys_fail(fptr->path);
 	}
@@ -753,6 +804,6 @@ appendline(fptr, delim, strp)
 	if (c == EOF) {
 	    if (ferror(f)) {
-		if (errno == EINTR) continue;
-		rb_sys_fail(fptr->path);
+		io_retryable(f, fptr->path);
+		continue;
 	    }
 	    return c;
@@ -1065,6 +1116,6 @@ rb_io_each_byte(io)
 	if (c == EOF) {
 	    if (ferror(f)) {
-		if (errno == EINTR) continue;
-		rb_sys_fail(fptr->path);
+		io_retryable(f, fptr->path);
+		continue;
 	    }
 	    break;
@@ -1096,6 +1147,6 @@ rb_io_getc(io)
     if (c == EOF) {
 	if (ferror(f)) {
-	    if (errno == EINTR) goto retry;
-	    rb_sys_fail(fptr->path);
+	    io_retryable(f, fptr->path);
+	    continue;
 	}
 	return Qnil;


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread