Ticket #656 (closed todo: fixed)

Opened 5 years ago

Last modified 5 years ago

Optimization in src/pmc/RetContinuation.pmc:invoke causes segfault

Reported by: whiteknight Owned by:
Priority: normal Milestone:
Component: none Version: 1.1.0
Severity: medium Keywords:
Cc: Language:
Patch status: Platform:

Description

After the GC API refactor, there is now a line in src/pmc/retcontinuation.pmc:invoke() that is commented out:

/* Parrot_gc_free_pmc_header(interp, SELF); */

Prior to the refactor, this line was replaced by this sequence:

VTABLE_destroy(interp, SELF);
{
    Arenas            *arena_base = interp->arena_base;
    Small_Object_Pool *pool       = arena_base->pmc_pool;
    Small_Object_Pool *ext_pool   = arena_base->pmc_ext_pool;
    ext_pool->add_free_object(interp, ext_pool,
            (PObj *)SELF->pmc_ext);
    PObj_flags_SETTO((PObj *)SELF, PObj_on_free_list_FLAG);
    pool->add_free_object(interp, pool, (PObj *)SELF);
    pool->num_free_objects++;
}

As far as I can trace it, the two sequences should perform the same exact sequence of steps in the same order (call the destroy VTABLE, free the pmc_ext, set the on_free_list flag for the pmc, free the pmc, increment the number of items on the free list).

After the refactor, this line of code causes a segfault in t/pmc/packfiledirectory.t, for reasons that I can't figure out. If we can figure out the segfault, we can uncomment this line and get a performance win. (I think chromatic said it was something like 2.25%).

Change History

Changed 5 years ago by coke

This test file doesn't appear to be segfaulting, and has no skip'd or todo'd tests.

Can we close this ticket?

Changed 5 years ago by bacek

  • status changed from new to closed
  • resolution set to fixed

Yes, we can. There is no more RetContinuation.destroy anymore.

Note: See TracTickets for help on using tickets.