#! 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.