On Thu, 24 Jun 2004, Joe Schaefer wrote:

> Stas Bekman <[EMAIL PROTECTED]> writes:
>
> [...]
>
> > I suppose the issue comes from loading APR.so and mod_perl.so at the
> > same time and having the wrong symbol kicking in. It should have
> > picked mod_perl.so's modperl_interp_unselect, not APR.so's one.
>
> This is my concern, too, because on my box, the APR version of
> modperl_interp_unselect is never actually invoked by the test suite.
> Randy, throw in an abort() call like this and see if you get any segfaults
> with the tests.
>
>
> #include <stdlib.h>
>
> /* XXX: provide the missing symbol for APR::Pool as a tmp workaround  */
> #ifndef modperl_interp_unselect
> apr_status_t modperl_interp_unselect(void *data) {
>   modperl_interp_t *interp = data;
>
>   abort(); /* GOT HERE on core dump */
>
> #ifdef USE_ITHREADS
>   if (interp->refcnt != 0) {
>     --interp->refcnt;
>   }
> #endif
>   return APR_SUCCESS;
>   }
> #endif

That's a good idea - I'll try that tonight, in a few hours,
when I have access to my Win32 machine. But I'm 99% sure
(meaning there's a 50% chance I'm wrong :) that APR/APR::*
are using APR.so's modperl_interp_unselect. The reason for
this is that, on Win32, the symbols specified at link time
are the ones used, and I took out all references to the
mod_perl lib when linking APR/APR::*. So even when
mod_perl.so is loaded in a test, the modperl_interp_unselect
symbol present there is ignored by APR/APR::*.

-- 
best regards,
randy

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to