/*
- * $Id: SimpleServer.xs,v 1.30 2004-06-05 23:09:04 adam Exp $
+ * $Id: SimpleServer.xs,v 1.35 2005-11-09 09:35:47 adam Exp $
* ----------------------------------------------------------------------
*
* Copyright (c) 2000-2004, Index Data.
}
/* debugging routine to check for destruction of Perl interpreters */
-#if 1
-int tst_clones(void)
+#ifdef USE_ITHREADS
+void tst_clones(void)
{
int i;
PerlInterpreter *parent = PERL_GET_CONTEXT;
- for (i = 0; i<500; i++)
+ for (i = 0; i<5000; i++)
{
PerlInterpreter *perl_interp;
+ PERL_SET_CONTEXT(parent);
PL_perl_destruct_level = 2;
- perl_interp = perl_clone(parent, 0);
+ perl_interp = perl_clone(parent, CLONEf_CLONE_HOST);
PL_perl_destruct_level = 2;
+ PERL_SET_CONTEXT(perl_interp);
perl_destruct(perl_interp);
perl_free(perl_interp);
}
if (!current) {
PerlInterpreter *perl_interp;
PERL_SET_CONTEXT( root_perl_context );
- perl_interp = perl_clone(root_perl_context, 0);
+ perl_interp = perl_clone(root_perl_context, CLONEf_CLONE_HOST);
PERL_SET_CONTEXT( perl_interp );
}
}
{
va_list ap;
- fprintf(stderr, "FATAL (yazwrap): ");
+ fprintf(stderr, "FATAL (SimpleServer): ");
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
case Z_RPNStructure_simple: {
Z_Operand *o = s->u.simple;
Z_AttributesPlusTerm *at;
+ if (o->which == Z_Operand_resultSetId) {
+ /* This code causes a SIGBUS on my machine, and I have no
+ idea why. It seems as clear as day to me */
+ char *rsid = (char*) o->u.resultSetId;
+ printf("Encoding resultSetId '%s'\n", rsid);
+ sv = newObject("Net::Z3950::RPN::RSID", (SV*) (hv = newHV()));
+ printf("Made sv=0x%lx, hv=0x%lx\n",
+ (unsigned long) sv ,(unsigned long) hv);
+ SV *sv2 = newSVpv(rsid, strlen(rsid));
+ setMember(hv, "id", sv2);
+ printf("Set hv{id} to 0x%lx\n", (unsigned long) sv2);
+ return sv;
+ }
if (o->which != Z_Operand_APT)
- fatal("can't handle RPN simples other than APT");
+ fatal("can't handle RPN simples other than APT and RSID");
at = o->u.attributesPlusTerm;
if (at->term->which != Z_Term_general)
fatal("can't handle RPN terms other than general");
sv_free((SV*) href);
}
- sv_free(zhandle->handle);
+ else
+ sv_free(zhandle->handle);
PUTBACK;
FREETMPS;
LEAVE;
MODULE = Net::Z3950::SimpleServer PACKAGE = Net::Z3950::SimpleServer
+PROTOTYPES: DISABLE
+
+
void
set_init_handler(arg)
SV *arg
RETVAL
+void
+yazlog(arg)
+ SV *arg
+ CODE:
+ STRLEN len;
+ char *ptr;
+ ptr = SvPV(arg, len);
+ yaz_log(YLOG_LOG, "%.*s", len, ptr);