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

ruby-changes:35340

From: normal <ko1@a...>
Date: Sat, 6 Sep 2014 07:49:57 +0900 (JST)
Subject: [ruby-changes:35340] normal:r47422 (trunk): test/ruby/test_io.rb: avoid EBADF

normal	2014-09-06 07:49:29 +0900 (Sat, 06 Sep 2014)

  New Revision: 47422

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

  Log:
    test/ruby/test_io.rb: avoid EBADF
    
    * test/ruby/test_io.rb (test_readpartial_locktmp): avoid EBADF
      [ruby-core:64773] [ruby-core:64775]

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_io.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 47421)
+++ ChangeLog	(revision 47422)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Sat Sep  6 07:46:51 2014  Eric Wong  <e@8...>
+
+	* test/ruby/test_io.rb (test_readpartial_locktmp): avoid EBADF
+	  [ruby-core:64773] [ruby-core:64775]
+
 Sat Sep  6 01:34:31 2014  Tanaka Akira  <akr@f...>
 
 	* process.c (rb_f_exec): Call before_exec_async_signal_safe and
Index: test/ruby/test_io.rb
===================================================================
--- test/ruby/test_io.rb	(revision 47421)
+++ test/ruby/test_io.rb	(revision 47422)
@@ -2866,24 +2866,29 @@ End https://github.com/ruby/ruby/blob/trunk/test/ruby/test_io.rb#L2866
     data = "a" * 100
     th = nil
     with_pipe do |r,w|
-      r.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
-      th = Thread.new {r.readpartial(100, buf)}
-      Thread.pass until th.stop?
-      buf.replace("")
-      assert_empty(buf, bug6099)
-      assert_predicate(th, :alive?)
-      w.write(data)
-      Thread.pass while th.alive?
-    end
-    assert_equal(data, buf, bug6099)
-  rescue RuntimeError # can't modify string; temporarily locked
-  ensure
-    if th
       begin
+        r.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
+        th = Thread.new {r.readpartial(100, buf)}
+
+        Thread.pass until th.stop?
+
+        assert_equal 100, buf.bytesize
+
+        begin
+          buf.replace("")
+        rescue RuntimeError => e
+          assert_match(/can't modify string; temporarily locked/, e.message)
+          Thread.pass
+        end until buf.empty?
+
+        assert_empty(buf, bug6099)
+        assert_predicate(th, :alive?)
+        w.write(data)
+        Thread.pass while th.alive?
         th.join
-      rescue IOError
       end
     end
+    assert_equal(data, buf, bug6099)
   end
 
   def test_advise_pipe

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

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