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