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

ruby-changes:22193

From: nari <ko1@a...>
Date: Mon, 9 Jan 2012 15:02:12 +0900 (JST)
Subject: [ruby-changes:22193] nari:r34242 (trunk): * gc.c: free_slots is changed Singly linked list. clear

nari	2012-01-09 15:02:01 +0900 (Mon, 09 Jan 2012)

  New Revision: 34242

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

  Log:
    * gc.c: free_slots is changed Singly linked list. clear
      free_slots before sweep.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34241)
+++ ChangeLog	(revision 34242)
@@ -1,3 +1,8 @@
+Mon Jan  9 14:42:41 2012  Narihiro Nakamura  <authornari@g...>
+
+	* gc.c: free_slots is changed Singly linked list. clear
+	  free_slots before sweep.
+
 Mon Jan  9 07:46:17 2012  NARUSE, Yui  <naruse@r...>
 
 	* gc.c: i686-linux needs to define _XOPEN_SOURCE 600 for posix_memalign.
Index: gc.c
===================================================================
--- gc.c	(revision 34241)
+++ gc.c	(revision 34242)
@@ -320,7 +320,6 @@
     struct heaps_slot *next;
     struct heaps_slot *prev;
     struct heaps_slot *free_next;
-    struct heaps_slot *free_prev;
 };
 
 struct sorted_heaps_slot {
@@ -1097,22 +1096,13 @@
 link_free_heap_slot(rb_objspace_t *objspace, struct heaps_slot *slot)
 {
     slot->free_next = objspace->heap.free_slots;
-    if (objspace->heap.free_slots) {
-        objspace->heap.free_slots->free_prev = slot;
-    }
     objspace->heap.free_slots = slot;
 }
 
 static void
 unlink_free_heap_slot(rb_objspace_t *objspace, struct heaps_slot *slot)
 {
-    if (slot->free_prev)
-        slot->free_prev->free_next = slot->free_next;
-    if (slot->free_next)
-        slot->free_next->free_prev = slot->free_prev;
-    if (objspace->heap.free_slots == slot)
-        objspace->heap.free_slots = slot->free_next;
-    slot->free_prev = NULL;
+    objspace->heap.free_slots = slot->free_next;
     slot->free_next = NULL;
 }
 
@@ -2209,13 +2199,14 @@
         }
         sweep_slot->limit = final_num;
         unlink_heap_slot(objspace, sweep_slot);
-        unlink_free_heap_slot(objspace, sweep_slot);
     }
     else {
-        if (free_num > 0 && sweep_slot->free_next == NULL &&
-            sweep_slot->free_prev == NULL) {
+        if (free_num > 0) {
             link_free_heap_slot(objspace, sweep_slot);
         }
+        else if (sweep_slot->free_next != NULL) {
+            sweep_slot->free_next = NULL;
+        }
         objspace->heap.free_num += free_num;
     }
     objspace->heap.final_num += final_num;
@@ -2254,6 +2245,7 @@
     }
     objspace->heap.sweep_slots = heaps;
     objspace->heap.free_num = 0;
+    objspace->heap.free_slots = NULL;
 
     /* sweep unlinked method entries */
     if (GET_VM()->unlinked_method_entry_list) {
@@ -2395,7 +2387,7 @@
     else {
         GC_PROF_DEC_LIVE_NUM;
         slot = add_slot_local_freelist(objspace, (RVALUE *)p);
-        if (slot->free_next == NULL && slot->free_prev == NULL) {
+        if (slot->free_next == NULL) {
             link_free_heap_slot(objspace, slot);
         }
     }

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

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