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

ruby-changes:20681

From: mame <ko1@a...>
Date: Fri, 29 Jul 2011 01:25:33 +0900 (JST)
Subject: [ruby-changes:20681] mame:r32729 (ruby_1_9_3): * backport r32671 from trunk.

mame	2011-07-29 01:25:23 +0900 (Fri, 29 Jul 2011)

  New Revision: 32729

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

  Log:
    * backport r32671 from trunk.
    
    * proc.c: pre-allocate the unlinked_method_entry_list_entry struct to
      avoid memory allocation during GC.  based on a patch from Eric Wong.
      [ruby-core:38498]

  Modified files:
    branches/ruby_1_9_3/ChangeLog
    branches/ruby_1_9_3/proc.c

Index: ruby_1_9_3/ChangeLog
===================================================================
--- ruby_1_9_3/ChangeLog	(revision 32728)
+++ ruby_1_9_3/ChangeLog	(revision 32729)
@@ -1,3 +1,11 @@
+Mon Jul 25 23:51:01 2011  Yusuke Endoh  <mame@t...>
+
+	* backport r32671 from trunk.
+
+	* proc.c: pre-allocate the unlinked_method_entry_list_entry struct to
+	  avoid memory allocation during GC.  based on a patch from Eric Wong.
+	  [ruby-core:38498]
+
 Mon Jul 25 22:36:11 2011  Yusuke Endoh  <mame@t...>
 
 	* backport r32669 from trunk.
Index: ruby_1_9_3/proc.c
===================================================================
--- ruby_1_9_3/proc.c	(revision 32728)
+++ ruby_1_9_3/proc.c	(revision 32729)
@@ -19,6 +19,7 @@
     VALUE rclass;
     ID id;
     rb_method_entry_t *me;
+    struct unlinked_method_entry_list_entry *ume;
 };
 
 VALUE rb_cUnboundMethod;
@@ -867,7 +868,10 @@
 bm_free(void *ptr)
 {
     struct METHOD *data = ptr;
-    rb_unlink_method_entry(data->me);
+    struct unlinked_method_entry_list_entry *ume = data->ume;
+    ume->me = data->me;
+    ume->next = GET_VM()->unlinked_method_entry_list;
+    GET_VM()->unlinked_method_entry_list = ume;
     xfree(ptr);
 }
 
@@ -976,6 +980,7 @@
     data->me = ALLOC(rb_method_entry_t);
     *data->me = *me;
     data->me->def->alias_count++;
+    data->ume = ALLOC(struct unlinked_method_entry_list_entry);
 
     OBJ_INFECT(method, klass);
 
@@ -1084,6 +1089,7 @@
     *data->me = *orig->me;
     if (orig->me->def) orig->me->def->alias_count++;
     data->rclass = orig->rclass;
+    data->ume = ALLOC(struct unlinked_method_entry_list_entry);
     OBJ_INFECT(method, obj);
 
     return method;
@@ -1383,6 +1389,7 @@
     data->me = ALLOC(rb_method_entry_t);
     *data->me = *orig->me;
     if (data->me->def) data->me->def->alias_count++;
+    data->ume = ALLOC(struct unlinked_method_entry_list_entry);
 
     return clone;
 }
@@ -1549,6 +1556,7 @@
     if (bound->me->def) bound->me->def->alias_count++;
     bound->recv = recv;
     bound->rclass = CLASS_OF(recv);
+    data->ume = ALLOC(struct unlinked_method_entry_list_entry);
 
     return method;
 }

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

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