Well, currently, test 61 in t/pmc/pmc.t causes an abrupt stop of
the test session with the segfault box popping up. I haven't yet
taken a time to figure out what actually is the cause of trouble,
but I've already detected the precise place where that all happens.

It happens here

void
free_unused_pobjects(struct Parrot_Interp *interpreter,
        struct Small_Object_Pool *pool)
{
    struct Small_Object_Arena *cur_arena;

    ...

                /* if object is a PMC and needs destroying */
                if (PObj_is_PMC_TEST(b)) {
                    /* then destroy it here
                     */
                    if (PObj_active_destroy_TEST(b))
                        VTABLE_destroy(interpreter, (PMC *)b);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

while testing the ParrotInterpreter PMC when DOD calls a destroy method,
the buffer being passed contains an invalid reference and refering to it
produces an access violation.

Below is the call stack

free_unused_pobjects(Parrot_Interp * 0x002f39f8, Small_Object_Pool *
0x002f4340) line 525 + 14 bytes
Parrot_really_destroy(int 0, void * 0x002f39f8) line 964 + 22 bytes
Parrot_exit(int 0) line 48 + 16 bytes
main(int 1, char * * 0x002f2bb4) line 555 + 7 bytes
PARROT! mainCRTStartup + 227 bytes
KERNEL32! 77e9ca90()

It would be a time-saver for me to fix the bug if you lay out
some thoughts on this. So feel free to push the reply button.

0x4C56

Reply via email to