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

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/

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