perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Trawick <>
Subject Re: need sanity check on my mod_perl + 2.4.6 on Windows attempt
Date Wed, 06 Nov 2013 00:48:47 GMT
On Tue, Nov 5, 2013 at 11:53 AM, Jeff Trawick <> 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:
> (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 --!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...

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() 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

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...

View raw message