From d37e836a58ac1ac680ee8716ab1f0b4fc00a1f89 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 4 Mar 2003 07:04:11 +0000 Subject: * io.c (rb_io_popen): do not call rb_io_close() directly, call "close" method instead. [ruby-dev:19717] * io.c (rb_io_s_open): ditto. * hash.c (rb_any_hash): remove DEFER_INTS. all do_hash() calls in st.c are at the top of functions. No reentrant problem. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3551 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'io.c') diff --git a/io.c b/io.c index 4865b7ce79..af370ddeb4 100644 --- a/io.c +++ b/io.c @@ -1421,6 +1421,12 @@ rb_io_close_m(io) return Qnil; } +static VALUE +io_close(io) +{ + return rb_funcall(io, rb_intern("close"), 0, 0); +} + static VALUE rb_io_closed(io) VALUE io; @@ -2154,7 +2160,7 @@ rb_io_popen(str, argc, argv, klass) } RBASIC(port)->klass = klass; if (rb_block_given_p()) { - return rb_ensure(rb_yield, port, rb_io_close, port); + return rb_ensure(rb_yield, port, io_close, port); } return port; } @@ -2209,7 +2215,7 @@ rb_io_s_open(argc, argv, klass) VALUE io = rb_class_new_instance(argc, argv, klass); if (rb_block_given_p()) { - return rb_ensure(rb_yield, io, rb_io_close, io); + return rb_ensure(rb_yield, io, io_close, io); } return io; @@ -2999,16 +3005,6 @@ next_argv() return Qtrue; } -static void -any_close(file) - VALUE file; -{ - if (TYPE(file) == T_FILE) - rb_io_close(file); - else - rb_funcall3(file, rb_intern("close"), 0, 0); -} - static VALUE argf_getline(argc, argv) int argc; @@ -3039,7 +3035,7 @@ argf_getline(argc, argv) line = rb_io_getline(rs, fptr); } if (NIL_P(line) && next_p != -1) { - any_close(current_file); + io_close(current_file); next_p = 1; goto retry; } @@ -3074,7 +3070,7 @@ rb_gets() if (!next_argv()) return Qnil; line = rb_io_gets(current_file); if (NIL_P(line) && next_p != -1) { - any_close(current_file); + io_close(current_file); next_p = 1; goto retry; } @@ -3725,7 +3721,7 @@ argf_read(argc, argv) tmp = io_read(argc, argv, current_file); } if (NIL_P(tmp) && next_p != -1) { - any_close(current_file); + io_close(current_file); next_p = 1; goto retry; } @@ -3758,7 +3754,7 @@ argf_getc() byte = rb_io_getc(current_file); } if (NIL_P(byte) && next_p != -1) { - any_close(current_file); + io_close(current_file); next_p = 1; goto retry; } @@ -3850,7 +3846,7 @@ static VALUE argf_skip() { if (next_p != -1) { - any_close(current_file); + io_close(current_file); next_p = 1; } return argf; @@ -3859,7 +3855,7 @@ argf_skip() static VALUE argf_close() { - any_close(current_file); + io_close(current_file); if (next_p != -1) { next_p = 1; } -- cgit v1.2.3