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.