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

ruby-changes:25091

From: nobu <ko1@a...>
Date: Thu, 11 Oct 2012 23:10:01 +0900 (JST)
Subject: [ruby-changes:25091] nobu:r37143 (trunk): string.c: GC guard

nobu	2012-10-11 23:09:49 +0900 (Thu, 11 Oct 2012)

  New Revision: 37143

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

  Log:
    string.c: GC guard
    
    * string.c (rb_str_sub{seq,pos,str}, rb_str_each_{line,codepoint}):
      prevent String copies from GC.  [ruby-core:47881] [Bug #7135]

  Modified files:
    trunk/ChangeLog
    trunk/string.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37142)
+++ ChangeLog	(revision 37143)
@@ -1,3 +1,8 @@
+Thu Oct 11 23:09:46 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* string.c (rb_str_sub{seq,pos,str}, rb_str_each_{line,codepoint}):
+	  prevent String copies from GC.  [ruby-core:47881] [Bug #7135]
+
 Thu Oct 11 07:40:50 2012  NARUSE, Yui  <naruse@r...>
 
 	* iseq.c (insn_operand_intern): cast op to rb_call_info_t* before
Index: string.c
===================================================================
--- string.c	(revision 37142)
+++ string.c	(revision 37143)
@@ -1632,6 +1632,7 @@
     }
     else {
         str2 = rb_str_new5(str, RSTRING_PTR(str)+beg, len);
+	RB_GC_GUARD(str);
     }
 
     rb_enc_cr_str_copy_for_substr(str2, str);
@@ -1721,6 +1722,7 @@
     }
   end:
     *lenp = len;
+    RB_GC_GUARD(str);
     return p;
 }
 
@@ -1741,6 +1743,7 @@
 	str2 = rb_str_new5(str, p, len);
 	rb_enc_cr_str_copy_for_substr(str2, str);
 	OBJ_INFECT(str2, str);
+	RB_GC_GUARD(str);
     }
 
     return str2;
@@ -6206,6 +6209,7 @@
 	OBJ_INFECT(line, str);
 	rb_enc_cr_str_copy_for_substr(line, str);
 	rb_yield(line);
+	RB_GC_GUARD(str);
     }
 
     return orig;
@@ -6332,6 +6336,7 @@
 	rb_yield(UINT2NUM(c));
 	ptr += n;
     }
+    RB_GC_GUARD(str);
     return orig;
 }
 

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

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