diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-05-27 10:09:55 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-05-27 10:09:55 +0000 |
commit | 1c35277c2bfecaf1128f05d8644b247fbd5ef461 (patch) | |
tree | 4705051973ada3642c22474eebc97f4a508a646d | |
parent | 6eb8acae90ce774c054f0ea9b393df5a7601ffd7 (diff) | |
download | ruby-1c35277c2bfecaf1128f05d8644b247fbd5ef461.tar.gz |
* io.c (rb_io_autoclose_p): Don't raise on frozen IO.
* test/lib/minitest/unit.rb: IO#autoclose? may raise IOError.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46165 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | io.c | 4 | ||||
-rw-r--r-- | test/lib/minitest/unit.rb | 12 | ||||
-rw-r--r-- | test/ruby/test_io.rb | 7 |
4 files changed, 21 insertions, 8 deletions
@@ -1,3 +1,9 @@ +Tue May 27 19:07:26 2014 Tanaka Akira <akr@fsij.org> + + * io.c (rb_io_autoclose_p): Don't raise on frozen IO. + + * test/lib/minitest/unit.rb: IO#autoclose? may raise IOError. + Tue May 27 19:01:49 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com> * test/openssl/test_pair.rb: Modify TestSSL#test_read_and_write @@ -7607,8 +7607,8 @@ rb_io_s_for_fd(int argc, VALUE *argv, VALUE klass) static VALUE rb_io_autoclose_p(VALUE io) { - rb_io_t *fptr; - GetOpenFile(io, fptr); + rb_io_t *fptr = RFILE(io)->fptr; + rb_io_check_closed(fptr); return (fptr->mode & FMODE_PREP) ? Qfalse : Qtrue; } diff --git a/test/lib/minitest/unit.rb b/test/lib/minitest/unit.rb index 25160340db..5847da7d8c 100644 --- a/test/lib/minitest/unit.rb +++ b/test/lib/minitest/unit.rb @@ -1009,19 +1009,20 @@ module MiniTest h = {} ObjectSpace.each_object(IO) {|io| begin + autoclose = io.autoclose? fd = io.fileno rescue IOError # closed IO object next end - (h[fd] ||= []) << io + (h[fd] ||= []) << [io, autoclose] } fd_leaked.each {|fd| str = '' if h[fd] str << ' :' - h[fd].map {|io| + h[fd].map {|io, autoclose| s = ' ' + io.inspect - s << "(not-autoclose)" if !io.autoclose? + s << "(not-autoclose)" if !autoclose s }.each {|s| str << s @@ -1029,9 +1030,8 @@ module MiniTest end puts "Leaked file descriptor: #{name}: #{fd}#{str}" } - h.each {|fd, ios| - next if ios.length <= 1 - list = ios.map {|io| [io, io.autoclose?] } + h.each {|fd, list| + next if list.length <= 1 if 1 < list.count {|io, autoclose| autoclose } str = list.map {|io, autoclose| " #{io.inspect}" + (autoclose ? "(autoclose)" : "") }.sort.join puts "Multiple autoclose IO object for a file descriptor:#{str}" diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 0d5671a267..4cfd873a0d 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -2796,6 +2796,13 @@ End end end + def test_frozen_autoclose + with_pipe do |r,w| + fd = r.fileno + assert_equal(true, r.freeze.autoclose?) + end + end + def test_sysread_locktmp bug6099 = '[ruby-dev:45297]' buf = " " * 100 |