[svn:parrot] r48566 - trunk/src/gc

chromatic at svn.parrot.org chromatic at svn.parrot.org
Thu Aug 19 06:21:57 UTC 2010


Author: chromatic
Date: Thu Aug 19 06:21:56 2010
New Revision: 48566
URL: https://trac.parrot.org/parrot/changeset/48566

Log:
[gc] Forced freeing of empty blocks in compacting.

This patch is from TT #1742 by Nick Wellnhofer.

Modified:
   trunk/src/gc/alloc_resources.c

Modified: trunk/src/gc/alloc_resources.c
==============================================================================
--- trunk/src/gc/alloc_resources.c	Thu Aug 19 05:53:12 2010	(r48565)
+++ trunk/src/gc/alloc_resources.c	Thu Aug 19 06:21:56 2010	(r48566)
@@ -448,19 +448,21 @@
     if (mem_pools->gc_sweep_block_level)
         return;
 
+    ++mem_pools->gc_sweep_block_level;
+
+    /* We're collecting */
+    mem_pools->mem_allocs_since_last_collect    = 0;
+    mem_pools->header_allocs_since_last_collect = 0;
     ++mem_pools->gc_collect_runs;
 
     /* Snag a block big enough for everything */
     total_size = pad_pool_size(pool);
 
-    if (total_size == 0)
+    if (total_size == 0) {
+        free_old_mem_blocks(mem_pools, pool, pool->top_block, total_size);
+        --mem_pools->gc_sweep_block_level;
         return;
-
-    ++mem_pools->gc_sweep_block_level;
-
-    /* We're collecting */
-    mem_pools->mem_allocs_since_last_collect    = 0;
-    mem_pools->header_allocs_since_last_collect = 0;
+    }
 
     alloc_new_block(mem_pools, total_size, pool, "inside compact");
 


More information about the parrot-commits mailing list