Thanks again, for now, setCallback() is only being called once...
but it still panics on the second callback, whether to the same callback as the first successful one, or a different one being called for the first time?
That it works the first time and fails the second, still makes me think I am messing up the stack somehow?
As you'll see below, I've had various attempts at ensuring that the stack is cleaned up. I've tried both the Inline_* macros and the XS macros to no avail?
#! perl -slw use strict; use Inline 'NoClean', 'FORCE', 'INFO' ; use Inline Config => WARNINGS => 4; use Inline 'C' => 'DATA', NAME =>'test'; use Devel::Peek; sub recorder{ print "record: @_"; } sub player{ print "player: @_"; } print Dump \&recorder; printf "r:%x p:%x\n", \&recorder, \&player; setCallbacks( \&recorder, \&player ); record( 'test' ); play( 'test' ); __DATA__ __C__ SV *g_rec = (SV*)NULL; SV *g_play = (SV*)NULL; int setCallbacks( SV *rec, SV *play ) { printf( "r:%x p:%x\n", rec, play ); g_rec = SvREFCNT_inc( SvRV( rec ) ); g_play = SvREFCNT_inc( SvRV( play ) ); return 0; } int record( SV *m ) { // ENTER; // SAVETMPS; call_sv( g_rec, G_VOID ); // FREETMPS; // LEAVE; return 0; } int play( SV *m ) { // ENTER; // SAVETMPS; call_sv( g_play, G_VOID ); // FREETMPS; // LEAVE; return 0; } __END__ <-----------------------End of Information Section-------------------- +--------> SV = RV(0x18404b4) at 0x1949a74 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x226004 SV = PVCV(0x1824094) at 0x226004 REFCNT = 2 FLAGS = () IV = 0 NV = 0 COMP_STASH = 0x2251d0 "main" START = 0x1958cd4 ===> 11609 ROOT = 0x1958c90 XSUB = 0x0 XSUBANY = 0 GVGV::GV = 0x1959b98 "main" :: "recorder" FILE = "P:\test\test.pl" DEPTH = 0 FLAGS = 0x0 OUTSIDE_SEQ = 951 PADLIST = 0x226010 PADNAME = 0x22601c(0x1826a5c) PAD = 0x22604c(0x182ebb4) OUTSIDE = 0x2253c8 (MAIN) r:226004 p:1959c04 r:1949a74 p:2252a8 record: test panic: memory wrap at P:\test\test.pl line 18.
In reply to Re^6: panic: memory wrap
by BrowserUk
in thread panic: memory wrap
by BrowserUk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |