To let Tk list know a major gotcha blocking Tk release is fixed.
Thanks to Steve Lide for the guest account on his G5 machine
to track this!
To let perl-xs list know even I am human and do dumb things ...
void
WidgetMethod(widget,name,...)
SV * widget;
SV * name;
CODE:
{
Lang_CmdInfo *info = WindowCommand(widget, NULL, 1);
XSRETURN(Call_Tk(info, items, &ST(0)));
}
Looks neat and tidy - but is fatally flawed.
XSRETURN macro is basically
THE_PERL_STACK_POINTER += Something.
On Steve's G5 - that gets compiled as
Get PERL_STACK_POINTER
call function which returns value
add
Set PERL_STACK_POINTER
The snag is that when function which returns value is a
perl callback it can move the stack.
So after above the stack pointer is pointing into an old stack
which has now been free'd and re-used => CORE.
Changing it to:
void
WidgetMethod(widget,name,...)
SV * widget;
SV * name;
CODE:
{
Lang_CmdInfo *info = WindowCommand(widget, NULL, 1);
IV count = Call_Tk(info, items, &ST(0));
XSRETURN(count);
}
Fixes the problem.