On Mon, 10 Dec 2001, Nagesh Ayyagari wrote:
> Hi,
>
> Thanks for all your suggestions. I had tried couple of things over the
> weekend. Now I have few new things on the AIX shared libraries issue. I
> just want to see if you have any input
>
> 1.� I tried using Repos.exp generated by XS module. Looks like it works.
> So I do not have to change the Makfile that is generated by MakeMaker
> tool.
>
> 2. I have modified my test program to call more functions from different
> shared libraries. They all seem to work, except the
> XS_Repos_fetch_version() and few similar funcations which gives
> core-dump. The code-line that might be causing the problem is
>
> ======
> �+329� XS(XS_Repos_fetch_version)
> � +330� {
> � +331����� dXSARGS;
> � +332����� if (items != 7)
> � +333��������� Perl_croak(aTHX_ "Usage: Repos::fetch_version(handle,
> commonName,
> productName, objectIRIDs, branchIRIDs, versionNums, filePathNames)");
> � +334����� {
> � +335� #line 227 "Repos.xs"
> � +336������� int�������� fetch_status = 0;
> � +337������� int�������� prod_name_status = 0;
> � +338������� char**����� fetchVersionErrorsStack = (char **)NULL;
> � +339������� OCIEnv*���� envhp;
> � +340������� OCIError*�� errhp;
> � +341������� OCISvcCtx*� svchp;
> � +342� #line 343 "Repos.c"
> � +343��������� db_handle *���� handle;
> � +344��������� char *� commonName = (char *)SvPV(ST(1),PL_na);
> � +345��������� char *� productName = (char *)SvPV(ST(2),PL_na);
> � +346��������� char ** objectIRIDs = XS_unpack_charPtrPtr(ST(3));
> � +347��������� char ** branchIRIDs = XS_unpack_charPtrPtr(ST(4));
> � +348��������� int *�� versionNums = (int *)XS_unpack_intPtr(ST(5));
> � +349��������� char ** filePathNames = XS_unpack_charPtrPtr(ST(6));
> � +350
> � +351��������� if( sv_isobject(ST(0)) && (SvTYPE(SvRV(ST(0))) ==
> SVt_PVMG) )
> � +352������������� handle = (db_handle *)SvIV((SV*)SvRV( ST(0) ));
> � +353��������� else{
> � +354������������� warn( "Repos::fetch_version() -- handle is not a
> blessed SV re
> ference" );
> � +355������������� XSRETURN_UNDEF;
> � +356��������� };
> � +357� #line 243 "Repos.xs"
> � +358������� envhp = (OCIEnv*) handle->env_hp;
> �+359������� errhp = (OCIError*) handle->err_hp;
> � +360������� svchp = (OCISvcCtx*) handle->svc_hp;
> � +361
> � +362������ fprintf(stderr, "\n In fetch_version()� before set_repos_p_n
> \n");
> ====
>
> When I pass less than 7 parameters, I get an error from line # 333.
> However, when I pass wrong db_handle, I get a core dump.
>
> I will be looking into the source code for XS_unpack_charPtrPtr() and see
> if that is causing the core dump.
>
> Let me know if you have any know issues with XS_unpack_charPtrPtr().
Nagesh,
At the risk of seeming naive, what is XS_unpack_charPtrPtr()? I don't
recognize that as being from the Perl API.
Is this an object method, XS support for a tied scalar or what? Can you
give me a better feel for the overall context?
Steve