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

ruby-changes:9454

From: akr <ko1@a...>
Date: Thu, 25 Dec 2008 18:36:58 +0900 (JST)
Subject: [ruby-changes:9454] Ruby:r20992 (trunk): * io.c (pipe_close): removed.

akr	2008-12-25 18:36:40 +0900 (Thu, 25 Dec 2008)

  New Revision: 20992

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

  Log:
    * io.c (pipe_close): removed.
      (pipe_yield): defined.
      (rb_io_s_pipe): use pipe_yield.

  Modified files:
    trunk/ChangeLog
    trunk/io.c
    trunk/test/ruby/test_io.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20991)
+++ ChangeLog	(revision 20992)
@@ -1,3 +1,9 @@
+Thu Dec 25 18:36:04 2008  Tanaka Akira  <akr@f...>
+
+	* io.c (pipe_close): removed.
+	  (pipe_yield): defined.
+	  (rb_io_s_pipe): use pipe_yield.
+
 Thu Dec 25 17:49:45 2008  NARUSE, Yui  <naruse@r...>
 
 	* transcode.c (decorate_convpath): show type of escaping for
Index: io.c
===================================================================
--- io.c	(revision 20991)
+++ io.c	(revision 20992)
@@ -7003,18 +7003,9 @@
 }
 
 static VALUE
-pipe_close(VALUE args)
+pipe_yield(VALUE rw)
 {
-    VALUE *rw = (VALUE*)args;
-    VALUE io;
-    int i;
-
-    for (i = 0; i < 2; i++) {
-        io = rw[i];
-        if (!rb_io_closed(io))
-            rb_io_close(io);
-    }
-    return Qnil;
+    return rb_ensure(rb_yield, rw, io_close, rb_ary_entry(rw, 1));
 }
 
 /*
@@ -7122,7 +7113,7 @@
     rw[0] = r;
     rw[1] = w;
     if (rb_block_given_p()) {
-	return rb_ensure(rb_yield, ret, pipe_close, (VALUE)rw);
+	return rb_ensure(pipe_yield, ret, io_close, r);
     }
     return ret;
 }
Index: test/ruby/test_io.rb
===================================================================
--- test/ruby/test_io.rb	(revision 20991)
+++ test/ruby/test_io.rb	(revision 20992)
@@ -50,6 +50,19 @@
     assert(x[1].closed?)
   end
 
+  def test_pipe_block_close
+    4.times {|i|
+      x = nil
+      IO.pipe {|r, w|
+        x = [r,w]
+        r.close if (i&1) == 0
+        w.close if (i&2) == 0
+      }
+      assert(x[0].closed?)
+      assert(x[1].closed?)
+    }
+  end
+
   def test_gets_rs
     # default_rs
     r, w = IO.pipe

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

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