ruby-changes:5541
From: akr <ko1@a...>
Date: Mon, 9 Jun 2008 17:51:01 +0900 (JST)
Subject: [ruby-changes:5541] Ruby:r17044 (trunk): * io.c (fptr_finalize): close IO object if fd is already closed.
akr 2008-06-09 17:48:41 +0900 (Mon, 09 Jun 2008) New Revision: 17044 Modified files: trunk/ChangeLog trunk/io.c Log: * io.c (fptr_finalize): close IO object if fd is already closed. (rb_p): call rb_io_write just once. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17044&r2=17043&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=17044&r2=17043&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 17043) +++ ChangeLog (revision 17044) @@ -1,3 +1,8 @@ +Mon Jun 9 17:47:09 2008 Tanaka Akira <akr@f...> + + * io.c (fptr_finalize): close IO object if fd is already closed. + (rb_p): call rb_io_write just once. + Mon Jun 9 15:37:38 2008 Yukihiro Matsumoto <matz@r...> * ruby.c (require_libraries): req_list may be NULL. [ruby-dev:35008] Index: io.c =================================================================== --- io.c (revision 17043) +++ io.c (revision 17044) @@ -2673,6 +2673,7 @@ static void fptr_finalize(rb_io_t *fptr, int noraise) { + int ebadf = 0; if (fptr->wbuf_len) { io_fflush(fptr); } @@ -2690,13 +2691,22 @@ } else if (0 <= fptr->fd) { if (close(fptr->fd) < 0 && !noraise) { - /* fptr->fd is still not closed */ - rb_sys_fail(fptr->path); + if (errno != EBADF) { + /* fptr->fd is still not closed */ + rb_sys_fail(fptr->path); + } + else { + /* fptr->fd is already closed. */ + ebadf = 1; + } } } fptr->fd = -1; fptr->stdio_file = 0; fptr->mode &= ~(FMODE_READABLE|FMODE_WRITABLE); + if (ebadf) { + rb_sys_fail(fptr->path); + } } static void @@ -4750,8 +4760,9 @@ void rb_p(VALUE obj) /* for debug print within C code */ { - rb_io_write(rb_stdout, rb_obj_as_string(rb_inspect(obj))); - rb_io_write(rb_stdout, rb_default_rs); + VALUE str = rb_obj_as_string(rb_inspect(obj)); + rb_str_buf_append(str, rb_default_rs); + rb_io_write(rb_stdout, str); } /* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/