#! perl -slw use strict; use Inline 'NoClean', 'FORCE', 'INFO' ; use Inline Config => WARNINGS => 4; use Inline 'C' => 'DATA', NAME =>'test'; sub recorder{ print "record: @_"; } sub player{ print "player: @_"; } printf "r:%x p:%x\n", \&recorder, \&player; setCallbacks( \&recorder, \&player ); record( 'test' ); #record( 'test' ); #play( 'test' ); __DATA__ __C__ SV *g_rec = 0, *g_play = 0; int setCallbacks( SV *rec, SV *play ) { printf( "r:%x p:%x\n", rec, play ); g_rec = rec; SvREFCNT_inc( g_rec ); g_play = play; SvREFCNT_inc( g_play ); return 0; } int record( SV *m ) { call_sv( g_rec, G_VOID ); return 0; } int play( SV *m ) { call_sv( g_play, G_VOID ); return 0; } #### P:\test>test r:226004 p:2260b8 r:19499e4 p:2252a8 record: test #### P:\test>test r:226004 p:2260b8 r:19499e4 p:2252a8 record: test panic: memory wrap at P:\test\test.pl line 16.