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



This communication and any attachments may contain confidential/proprietary 
information and is intended for information purposes only. It is not an 
invitation or offer to purchase interests from Diamondback.  Any representation 
to the contrary is unintentional.  This communication is intended only for the 
person(s) to whom it is addressed.  If you are not the intended recipient you 
are hereby notified that you have received this document in error and that any 
review, dissemination, distribution, or copying of this message or any 
attachments is not permitted.  If you have received this in error, please 
notify the sender immediately by e-mail and delete this message.  All e-mails 
sent to or received from this address will be received by Diamondback Capital 
Management's company e-mail system and is subject to archival and possible 
review by someone other than the recipient.  This notice is automatically 
appended to each e-mail message leaving Diamondback Capital Management.

Reply via email to