[#18186] [req] Marshal — keiju@... (Keiju ISHITSUKA)

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

14 messages 2002/09/05
[#18190] Re: [req] Marshal — matz@... (Yukihiro Matsumoto) 2002/09/05

まつもと ゆきひろです

[#18229] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...>

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

22 messages 2002/09/09
[#18230] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — nobu.nakada@... 2002/09/09

なかだです。

[#18231] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

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

[#18232] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — nobu.nakada@... 2002/09/09

なかだです。

[#18233] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

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

[#18234] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — WATANABE Hirofumi <eban@...> 2002/09/09

わたなべです。

[#18236] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

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

[#18238] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — WATANABE Hirofumi <eban@...> 2002/09/09

わたなべです。

[#18241] Re: [ruby-cvs] rough/ext/stringio: * ruby-stringio.spec: 0.0.7, added changelog. — "U.Nakamura" <usa@...> 2002/09/09

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

[#18285] rubicon on EWS4800 — Koji Arai <JCA02266@...>

新井です。

59 messages 2002/09/13
[#18322] Re: rubicon on EWS4800 — Koji Arai <JCA02266@...> 2002/09/21

新井です。

[#18333] Re: rubicon on EWS4800 — kjana@...4lab.to (YANAGAWA Kazuhisa) 2002/09/21

In message <20020921.152641.11483667.JCA02266@nifty.ne.jp>

[#18336] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/21

なかだです。

[#18337] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/21

In article <200209211605.g8LG52p04564@sharui.nakada.kanuma.tochigi.jp>,

[#18338] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/21

なかだです。

[#18341] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/21

In article <200209211628.g8LGSxp04786@sharui.nakada.kanuma.tochigi.jp>,

[#18342] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/21

なかだです。

[#18343] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/21

In article <200209211739.g8LHdKp05495@sharui.nakada.kanuma.tochigi.jp>,

[#18345] Re: rubicon on EWS4800 — nobu.nakada@... 2002/09/22

なかだです。

[#18349] Re: rubicon on EWS4800 — Tanaka Akira <akr@...17n.org> 2002/09/22

In article <200209220415.g8M4Fkp24392@sharui.nakada.kanuma.tochigi.jp>,

[#18374] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — WATANABE Hirofumi <eban@...>

わたなべです。

20 messages 2002/09/25
[#18376] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — matz@... (Yukihiro Matsumoto) 2002/09/25

まつもと ゆきひろです

[#18377] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — nobu.nakada@... 2002/09/25

なかだです。

[#18378] Re: [ruby-cvs] ruby/ext/tcltklib: * eval.c (ruby_run): should set toplevel visibility again here. — WATANABE Hirofumi <eban@...> 2002/09/25

わたなべです。

[ruby-dev:18272] Re: thread failure after trap

From: nobu.nakada@...
Date: 2002-09-12 05:37:14 UTC
List: ruby-dev #18272
なかだです。

At Wed, 11 Sep 2002 23:22:14 +0900,
Yukihiro Matsumoto wrote:
> |[ruby-talk:40337]と[ruby-core:00019]の、trapでthreadがブロック
> |してしまうという件ですが、どうすべきでしょうか。
> |
> |とりあえず、[ruby-core:00023]+[ruby-core:00026]をCVS HEAD用にし
> |たパッチです。
> |
> |	* eval.c (rb_trap_eval): preserve thread status and so on.
> 
> どうしようかなあ、と思っていたところです。まあ、悪い影響があ
> るものでもないと思いますのでコミットしてくださいませんか?

socketを忘れてました。たぶん、こんなところではないかと。


Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.157
diff -u -2 -p -w -r1.157 io.c
--- io.c	11 Sep 2002 01:09:04 -0000	1.157
+++ io.c	12 Sep 2002 04:41:47 -0000
@@ -262,22 +262,58 @@ io_fflush(f, fptr)
 }
 
-void
+int
 rb_io_wait_readable(f)
     int f;
 {
     fd_set rfds;
+
+    switch (errno) {
+      case EINTR:
+#if defined(ERESTART)
+      case ERESTART:
+#endif
+	rb_thread_wait_fd(f);
+	return Qtrue;
+
+      case EAGAIN:
+#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
+      case EWOULDBLOCK:
+#endif
     FD_ZERO(&rfds);
     FD_SET(f, &rfds);
     rb_thread_select(f + 1, &rfds, NULL, NULL, NULL);
+	return Qtrue;
+
+      default:
+	return Qfalse;
+    }
 }
 
-void
+int
 rb_io_wait_writable(f)
     int f;
 {
     fd_set wfds;
+
+    switch (errno) {
+      case EINTR:
+#if defined(ERESTART)
+      case ERESTART:
+#endif
+	rb_thread_fd_writable(f);
+	return Qtrue;
+
+      case EAGAIN:
+#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
+      case EWOULDBLOCK:
+#endif
     FD_ZERO(&wfds);
     FD_SET(f, &wfds);
     rb_thread_select(f + 1, NULL, &wfds, NULL, NULL);
+	return Qtrue;
+
+      default:
+	return Qfalse;
+    }
 }
 
@@ -320,17 +356,6 @@ io_write(io, str)
 	n -= r;
 	if (ferror(f)) {
-	    switch (errno) {
-	      case EINTR:
-#if defined(ERESTART)
-	      case ERESTART:
-#endif
-		clearerr(f);
-		continue;
-	      case EAGAIN:
-#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
-	      case EWOULDBLOCK:
-#endif
+	    if (rb_io_wait_writable(fileno(f))) {
 		clearerr(f);
-		rb_io_wait_writable(fileno(f));
 		continue;
 	    }
@@ -583,29 +608,4 @@ rb_io_to_io(io)
 
 /* reading functions */
-static void
-io_read_retryable(f, path)
-    FILE *f;
-    const char *path;
-{
-    switch (errno) {
-      case EINTR:
-#if defined(ERESTART)
-      case ERESTART:
-#endif
-	clearerr(f);
-	break;
-      case EAGAIN:
-#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
-      case EWOULDBLOCK:
-#endif
-	clearerr(f);
-	rb_io_wait_readable(fileno(f));
-	break;
-      default:
-	rb_sys_fail(path);
-	break;
-    }
-}
-
 long
 rb_io_fread(ptr, len, f)
@@ -831,5 +831,7 @@ appendline(fptr, delim, strp)
 	if (c == EOF) {
 	    if (ferror(f)) {
-		io_read_retryable(f, fptr->path);
+		if (!rb_io_wait_readable(fileno(f)))
+		    rb_sys_fail(fptr->path);
+		clearerr(f);
 		continue;
 	    }
@@ -1144,5 +1146,7 @@ rb_io_each_byte(io)
 	if (c == EOF) {
 	    if (ferror(f)) {
-		io_read_retryable(f, fptr->path);
+		if (!rb_io_wait_readable(fileno(f)))
+		    rb_sys_fail(fptr->path);
+		clearerr(f);
 		continue;
 	    }
@@ -1175,5 +1179,7 @@ rb_io_getc(io)
     if (c == EOF) {
 	if (ferror(f)) {
-	    io_read_retryable(f, fptr->path);
+	    if (!rb_io_wait_readable(fileno(f)))
+		rb_sys_fail(fptr->path);
+	    clearerr(f);
 	    goto retry;
 	}
Index: rubyio.h
===================================================================
RCS file: /cvs/ruby/src/ruby/rubyio.h,v
retrieving revision 1.18
diff -u -2 -p -w -r1.18 rubyio.h
--- rubyio.h	16 Aug 2002 02:52:25 -0000	1.18
+++ rubyio.h	12 Sep 2002 04:40:21 -0000
@@ -65,4 +65,6 @@ void rb_io_fptr_finalize _((OpenFile*));
 void rb_io_synchronized _((OpenFile*));
 void rb_io_check_closed _((OpenFile*));
+int rb_io_wait_readable _((int));
+int rb_io_wait_writable _((int));
 
 VALUE rb_io_taint_check _((VALUE));
Index: ext/socket/socket.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/socket/socket.c,v
retrieving revision 1.84
diff -u -2 -p -w -r1.84 socket.c
--- ext/socket/socket.c	30 Aug 2002 14:34:57 -0000	1.84
+++ ext/socket/socket.c	12 Sep 2002 04:36:29 -0000
@@ -389,7 +389,7 @@ bsock_send(argc, argv, sock)
     f = GetWriteFile(fptr);
     fd = fileno(f);
-  retry:
     rb_thread_fd_writable(fd);
     StringValue(mesg);
+  retry:
     if (!NIL_P(to)) {
 	StringValue(to);
@@ -401,7 +401,5 @@ bsock_send(argc, argv, sock)
     }
     if (n < 0) {
-	switch (errno) {
-	  case EINTR:
-	    rb_thread_schedule();
+	if (rb_io_wait_writable(fd)) {
 	    goto retry;
 	}
@@ -459,7 +457,5 @@ s_recvfrom(sock, argc, argv, from)
 
     if (slen < 0) {
-	switch (errno) {
-	  case EINTR:
-	    rb_thread_schedule();
+	if (rb_io_wait_readable(fd)) {
 	    goto retry;
 	}
@@ -1187,6 +1183,6 @@ s_accept(klass, fd, sockaddr, len)
 	    retry = 1;
 	    goto retry;
-	  case EINTR:
-	    rb_thread_schedule();
+	}
+	if (rb_io_wait_readable(fd)) {
 	    goto retry;
 	}
@@ -1452,7 +1448,5 @@ udp_send(argc, argv, sock)
 	    return INT2FIX(n);
 	}
-	switch (errno) {
-	  case EINTR:
-	    rb_thread_schedule();
+	if (rb_io_wait_writable(fileno(f))) {
 	    goto retry;
 	}


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

In This Thread