On Thu, Mar 3, 2016 at 12:50 PM, Lance Dillon <
riffraff169@yahoo.com> wrote:
> Sorry, that was all wrong. That is callback_args, which is a required
> parameter.
>
>
> get_all_args("signal_connect",args,"%s%*%*.%s%d",&a,&tmp1,&tmp2,&detail,&connect_before);
>
> assign_svalue_no_free(&b->cb,tmp1);
> assign_svalue_no_free(&b->args,tmp2);
>
> So when it tries to free the signal, it tries to free b->args, which is
> invalid when no callback_arg passed in.
>
> So probably always needs a callback arg, even if only 0. In fact, if empty,
> should probably just default to 0, just to make it easier on code later.
That's what already happens, actually - see just above the get_all_args:
if (args==2) {
push_int(0);
args++;
}
If you provide only the signal and the function, it quietly pushes a
zero onto the stack and pretends you included that.
ChrisA