On my system, allowing Parrot GC to run during the Lua tests makes a lot of segfaults during DOD, specifically when trying to destroy PMCs which already have their vtable pointers invalidated. (This invalidation occurs when freeing a PMC.)
The main culprit seems to be a PMC of type 82, which corresponds to the LuaTable PMC. With the attached patch (for troubleshooting, not for application) disabling freeing LuaTable PMCs, most of the Lua tests pass. This makes me wonder if there's a LuaTable PMC somewhere not getting marked properly. Of course, tracking it down is more work. Note also that the -t flag doesn't work with the command line: ../../parrot -t lua.pbc t/some_lua_test_number.lua It would be super nice if it did. -- c
=== src/gc/dod.c ================================================================== --- src/gc/dod.c (revision 6305) +++ src/gc/dod.c (local) @@ -304,6 +304,8 @@ /* mark the root_namespace */ pobject_lives(interp, (PObj *)interp->root_namespace); + pobject_lives(interp, (PObj *)interp->HLL_namespace); + /* s. packfile.c */ mark_const_subs(interp); @@ -646,9 +648,10 @@ } assert(dod_object); - dod_object(interp, pool, b); - - pool->add_free_object(interp, pool, b); + if (PObj_is_PMC_TEST(b) && ((PMC *)b)->vtable->base_type != 82){ + dod_object(interp, pool, b); + pool->add_free_object(interp, pool, b); + } } next: b = (Buffer *)((char *)b + object_size);