diff --git a/src/object.c b/src/object.c index 089bb895a5adb0ad8e3b1143419bad4be76d719f..3495a012a0e52c14e2f8fb665ea07f579ff76ac5 100644 --- a/src/object.c +++ b/src/object.c @@ -839,6 +839,13 @@ PMOD_EXPORT void destruct_object (struct object *o, enum object_destruct_reason return; } get_destroy_called_mark(o)->p=p; + } else if ((p->flags & (PROGRAM_HAS_C_METHODS|PROGRAM_NEEDS_PARENT)) == + (PROGRAM_HAS_C_METHODS|PROGRAM_NEEDS_PARENT)) { + /* We might have event handlers that need + * the program to reach the parent. + */ + get_destroy_called_mark(o)->p=p; + destroy_called = 1; } debug_malloc_touch(o); debug_malloc_touch(o->storage); diff --git a/src/program.c b/src/program.c index 45a343aa403f81bc611f5dac3bcff94afc43f692..29b0c320ee83c26565ee58f8e3903e515d75f92b 100644 --- a/src/program.c +++ b/src/program.c @@ -4642,6 +4642,10 @@ void lower_inherit(struct program *p, return; } + if (p->flags & PROGRAM_HAS_C_METHODS) { + Pike_compiler->new_program->flags |= PROGRAM_HAS_C_METHODS; + } + /* parent offset was increased by 42 for above test.. */ if(parent_offset) parent_offset-=42;