there is an example in the C cookbook of calling perl from an Inline::C
function.  the example works on my system (RHEL 3, gcc 3.2.3, and perl
5.8.8).

i have a more complex program that uses josh pritikin's Event module.
i'm trying to use Inline::C to integrate a C++ library into the
program.  yes, that's right - Inline::C for a C++ library!  i've
interposed a thin C wrapper layer because Inline::CPP was a little
too unwieldy to use directly in this case.

there is an Inline::C function in the complex program that tries
to call back to perl.  eventually, it will pass a wrapped C++ runtime
object which will behave like a read-only hash.  but for now, the
callback is just passing a string, exactly like the working
example from from the Inline C Cookbook.

however, the callback in the complex program SEGV's within
'call_pv'. here is the  source that causes the crash:

void pass_to_perl (void *p)
{
  Inline_Stack_Vars;
  Inline_Stack_Push (newSVpvf ("this is an arg string"));
  Inline_Stack_Done;
  call_pv ("main::callback", 0);
  Inline_Stack_Void;
}

if i run the complex program with a perl binary compiled
with "-g -DDEBUGGING", i get the error message:

  Event: trapped error in `Handler': panic: memory wrap at ./xx line 162.

the stack trace from the optimized perl binary when it SEGV's looks
like this:

(gdb) where
#0  0x00c8423c in memcpy () from /lib/tls/libc.so.6
#1  0x00569366 in Perl_pp_entersub () from
/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/libperl.so
#2  0x0050177c in Perl_call_sv () from
/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/libperl.so
#3  0x00501617 in Perl_call_sv () from
/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/libperl.so
#4  0x00500dd4 in Perl_call_pv () from
/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE/libperl.so
#5  0x00700334 in pass_to_perl (p=0x9056008) at xx_0e2e.xs:31

   (other frames elided for the sake of brevity...)

this has me stopped cold. any thoughts/suggestions?  any way
to get more info?

/mark

Reply via email to