On Sun, Dec 15, 2013 at 04:19:19PM +0000, Nicholas Clark wrote:

> (Again) I don't know what the correct fix is.

For now I'm working round it with this:

commit d3b4bca8139a5875e6a91d14896c2167ce36e23d
Author: Nicholas Clark <n...@ccl4.org>
Date:   Sun Dec 15 18:31:29 2013 +0100

    XXX Unclear if this is correct-ish, or the original code was.
    
    (If the latter, then the call that sets fromspace to be inaccessible needs 
to
    move later, and thefore to two places.)

diff --git a/src/gc/orchestrate.c b/src/gc/orchestrate.c
index 52a6206..804f0f6 100644
--- a/src/gc/orchestrate.c
+++ b/src/gc/orchestrate.c
@@ -296,6 +296,9 @@ static void run_gc(MVMThreadContext *tc, MVMuint8 
what_to_do) {
             MVM_gc_collect_free_gen2_unmarked(other);
         }
     }
+    if (what_to_do == MVMGCWhatToDo_All) {
+        MVM_gc_collect_free_stables(tc);
+    }
     tc->nursery_thing->disable_fromspace(tc);
 }
 
@@ -366,11 +369,6 @@ void MVM_gc_enter_from_allocator(MVMThreadContext *tc) {
             MVM_panic(MVM_exitcode_gcorch, "start votes was %d\n", 
MVM_load(&tc->instance->gc_finish));
 
         run_gc(tc, MVMGCWhatToDo_All);
-
-        /* Free any STables that have been marked for deletion. It's okay for
-         * us to muck around in another thread's fromspace while it's mutating
-         * tospace, really. */
-        MVM_gc_collect_free_stables(tc);
     }
     else {
         /* Another thread beat us to starting the GC sync process. Thus, act as


With this, all NQP tests pass I can build the Rakudo setting, with a nursery
size of 2048K.

I have now written a script that will attempt to repeatedly recompile that
far, each time dropping the nursery size by 1K, until something breaks.
I shall nice it appropriately, and if it still going tomorrow, try again
with a larger decrement, until something does fail.

Nicholas Clark

Reply via email to