]> gitweb.factorcode.org Git - factor.git/commitdiff
When doing code heap compaction, don't scan stacks as roots since we're going to...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 18 Apr 2009 08:25:51 +0000 (03:25 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 18 Apr 2009 08:25:51 +0000 (03:25 -0500)
vm/data_gc.c

index 11c1639fea53f8d6b88bef3af8e1cd7649096315..2252d07541f05ceb10a1d6db8050ae9572f73d63 100755 (executable)
@@ -149,21 +149,23 @@ void copy_roots(void)
        copy_registered_locals();
        copy_stack_elements(extra_roots_region,extra_roots);
 
-       save_stacks();
-       F_CONTEXT *stacks = stack_chain;
-
-       while(stacks)
+       if(!performing_compaction)
        {
-               copy_stack_elements(stacks->datastack_region,stacks->datastack);
-               copy_stack_elements(stacks->retainstack_region,stacks->retainstack);
+               save_stacks();
+               F_CONTEXT *stacks = stack_chain;
+
+               while(stacks)
+               {
+                       copy_stack_elements(stacks->datastack_region,stacks->datastack);
+                       copy_stack_elements(stacks->retainstack_region,stacks->retainstack);
 
-               copy_handle(&stacks->catchstack_save);
-               copy_handle(&stacks->current_callback_save);
+                       copy_handle(&stacks->catchstack_save);
+                       copy_handle(&stacks->current_callback_save);
 
-               if(!performing_compaction)
                        mark_active_blocks(stacks);
 
-               stacks = stacks->next;
+                       stacks = stacks->next;
+               }
        }
 
        int i;