On Tue, Nov 5, 2013 at 11:53 AM, Jeff Trawick <traw...@gmail.com> wrote:

> * Have existing 64-bit debug build of httpd/apr/etc. with VS 2012
> * Checked out httpd24threading branch of mod_perl
> * Have ActiveState 64-bit build of Perl 5.16.3 in PATH
>
> From a VS 2012 64-bit command prompt:
>
> > set MP_USE_MY_EXTUTILS_EMBED=1
> (ActiveState ppm doesn't show the exact version requested as available.)
>
> > perl Makefile.PL MP_AP_PREFIX=%HOME%\PREFIXES\241
> (and let it download apxs.bat et al)
> > nmake
> > nmake install
> > nmake test
>
> ==> crash at httpd startup
>
> If I believe the Visual Studio debugger, it fails with a very basic
> linkage issue -- mod_authz_core.so!add_authz_provider has non-NULL
> cmd_parms; it calls perl_parse_require_line(), which the debugger believes
> has a NULL cmd_parms.  And indeed it crashes at a place in
> modperl_interp_pool_select() where a NULL pointer would be used, after
> making a bad decision based on the NULL cmd_parms.
>
> Any guess on what to change first?
>
> --
> Born in Roswell... married an alien...
> http://emptyhammock.com/
>

Back to the httpd24threading branch:

* modperl_interp_pool_select() has this notion of phase, which must either
be startup or request context.
* It thinks it is startup only if the pool passed in is s->process->pconf.
* Sometimes it is passed s->process->pool (parent of pconf), such as from
perl_parse_require_line().
* perl_parse_require_line() can sometimes be called from request context.
* When perl_parse_require_line() calls modperl_interp_pool_select(),
request context can never be identified because perl_parse_require_line()
never passes in r->pool (which I guess would be cmd->pool).
* etc.

This would seem to be the way to get the right pool to
modperl_interp_pool_select().

Index: src/modules/perl/modperl_util.c
===================================================================
--- src/modules/perl/modperl_util.c     (revision 1539040)
+++ src/modules/perl/modperl_util.c     (working copy)
@@ -989,7 +989,7 @@
     int count;
     void *key;
     auth_callback *ab;
-    MP_dINTERP_POOLa(cmd->server->process->pool, cmd->server);
+    MP_dINTERP_POOLa(cmd->pool, cmd->server);

     if (global_authz_providers == NULL) {
         MP_INTERP_PUTBACK(interp, aTHX);

That still doesn't bring happiness (no interpreter returned, resulting in a
crash trying to dereference interp).

Any idea where to try to hack in some -debug support for "devenv /debugexe"?

Where do I see messages like

           MP_TRACE_i(MP_FUNC, "using parent interpreter at startup");

-- 
Born in Roswell... married an alien...
http://emptyhammock.com/

Reply via email to