Ah well, good, I must have missed that the first time (apparently). Anyway, I'll put in some debugs (printfs, right) and do some tracing tomorrow and see what I can narrow down, unless someone else manages to find it before then.
On Wednesday, March 2, 2016 8:53 PM, Chris Angelico <ros...@gmail.com> wrote: On Thu, Mar 3, 2016 at 12:50 PM, Lance Dillon <riffraff...@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