in reply to Re: panic: memory wrap
in thread panic: memory wrap
I managed to reproduce the problem in a standalone testcase.
It seems that the different coderef values from Perl and XS are a red herring. I guess dereferencing a coderef in Perl has some indirection magic that I don't understand, because I get different values in the following test script, but that doesn't stop it from working?
#! 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; }
As is, with the second call to record() and that to play() commented out, the program runs fine
P:\test>test r:226004 p:2260b8 r:19499e4 p:2252a8 record: test
Different addresses(?), but it works. Remove either comment and it panics.
P:\test>test r:226004 p:2260b8 r:19499e4 p:2252a8 record: test panic: memory wrap at P:\test\test.pl line 16.
I assume that it is something to do with my (lack of) handling of the stack(?), but I've tried various combinations of the Inline_* macros without success.
Cluebats gratefully receieved.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: panic: memory wrap
by dave_the_m (Monsignor) on Nov 14, 2005 at 09:55 UTC | |
by BrowserUk (Patriarch) on Nov 14, 2005 at 16:11 UTC | |
by dave_the_m (Monsignor) on Nov 14, 2005 at 22:25 UTC | |
by BrowserUk (Patriarch) on Nov 14, 2005 at 23:06 UTC | |
by dave_the_m (Monsignor) on Nov 15, 2005 at 00:52 UTC | |
| |
by BrowserUk (Patriarch) on Nov 15, 2005 at 23:45 UTC | |
by dave_the_m (Monsignor) on Nov 16, 2005 at 00:32 UTC |