Well, here's the XS routine that's causing the memory fault. Like I said, routine works fine for non-threaded perl.
double
__call( sv_class, sv_path, sv_input )
SV * sv_class
SV * sv_path
SV * sv_input
CODE:
char *class = SvPV( sv_class, PL_na );
char *path = SvPV( sv_path, PL_na );
double input = SvNV( sv_input );
int fd;
door_arg_t arg;
double output;
fd = open(path, O_RDWR);
arg.data_ptr = (char *) &input;
arg.data_size = sizeof(double);
arg.desc_ptr = NULL;
arg.desc_num = 0;
arg.rbuf = (char *) &output;
arg.rsize = sizeof(double);
if ( door_call(fd, &arg) == 0 ) {
RETVAL = output;
} else {
printf("ERRNO: %d\n",errno);
RETVAL = -1;
}
OUTPUT:
RETVAL
|