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