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/