[前][次][番号順一覧][スレッド一覧]

ruby-changes:10942

From: yugui <ko1@a...>
Date: Sun, 22 Feb 2009 18:48:32 +0900 (JST)
Subject: [ruby-changes:10942] Ruby:r22518 (ruby_1_9_1): merges r22099 from trunk into ruby_1_9_1.

yugui	2009-02-22 18:48:19 +0900 (Sun, 22 Feb 2009)

  New Revision: 22518

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22518

  Log:
    merges r22099 from trunk into ruby_1_9_1.
    * io.c (io_fread): use rb_io_wait_readable for retry
      avoid Errno::EINTR on ruby -e 'trap(:CHLD) {}; spawn("sleep 1"); STDIN.read'

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/io.c

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 22517)
+++ ruby_1_9_1/ChangeLog	(revision 22518)
@@ -1,3 +1,8 @@
+Fri Feb  6 23:28:33 2009  Tanaka Akira  <akr@f...>
+
+	* io.c (io_fread): use rb_io_wait_readable for retry
+	  avoid Errno::EINTR on ruby -e 'trap(:CHLD) {}; spawn("sleep 1"); STDIN.read'
+
 Fri Feb  6 20:37:42 2009  Tanaka Akira  <akr@f...>
 
 	* signal.c (register_sigaltstack): ignore sigaltstack error.
Index: ruby_1_9_1/io.c
===================================================================
--- ruby_1_9_1/io.c	(revision 22517)
+++ ruby_1_9_1/io.c	(revision 22518)
@@ -1428,12 +1428,15 @@
 
     if (READ_DATA_PENDING(fptr) == 0) {
 	while (n > 0) {
+          again:
 	    c = rb_read_internal(fptr->fd, RSTRING_PTR(str)+offset, n);
 	    if (c == 0) {
 		io_set_eof(fptr);
 		break;
 	    }
 	    if (c < 0) {
+                if (rb_io_wait_readable(fptr->fd))
+                    goto again;
 		rb_sys_fail_path(fptr->pathv);
 	    }
 	    offset += c;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]