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.

Reply via email to