stas 2003/09/22 16:25:54
Modified: src/modules/perl modperl_env.c Log: tracing, here I come Revision Changes Path 1.28 +103 -4 modperl-2.0/src/modules/perl/modperl_env.c Index: modperl_env.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_env.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -u -r1.27 -r1.28 --- modperl_env.c 7 Jul 2003 03:06:14 -0000 1.27 +++ modperl_env.c 22 Sep 2003 23:25:54 -0000 1.28 @@ -3,6 +3,16 @@ #define EnvMgObj SvMAGIC((SV*)ENVHV)->mg_ptr #define EnvMgLen SvMAGIC((SV*)ENVHV)->mg_len +/* XXX: move to utils? */ +static unsigned long modperl_interp_address(pTHX) +{ +#ifdef USE_ITHREADS + return (unsigned long)aTHX; +#else + return (unsigned long)0; /* just one interpreter */ +#endif +} + static MP_INLINE void modperl_env_hv_store(pTHX_ HV *hv, apr_table_entry_t *elt) { @@ -34,10 +44,10 @@ { k, MP_SSTRLEN(k), v, MP_SSTRLEN(v), 0 } static modperl_env_ent_t MP_env_const_vars[] = { + MP_ENV_ENT("MOD_PERL", MP_VERSION_STRING), #ifdef MP_COMPAT_1X MP_ENV_ENT("GATEWAY_INTERFACE", "CGI-Perl/1.1"), #endif - MP_ENV_ENT("MOD_PERL", MP_VERSION_STRING), { NULL } }; @@ -47,6 +57,8 @@ while (ent->key) { PERL_HASH(ent->hash, ent->key, ent->klen); + MP_TRACE_e(MP_FUNC, "[0x%lx] PERL_HASH: %s (len: %d)", + modperl_interp_address(aTHX), ent->key, ent->klen); ent++; } } @@ -58,6 +70,8 @@ modperl_env_untie(mg_flags); + MP_TRACE_e(MP_FUNC, "[0x%lx] %%ENV = ();", modperl_interp_address(aTHX)); + hv_clear(hv); modperl_env_tie(mg_flags); @@ -81,6 +95,8 @@ continue; } modperl_env_hv_store(aTHX_ hv, &elts[i]); + + MP_TRACE_e(MP_FUNC, "$ENV{%s} = \"%s\";", elts[i].key, elts[i].val); } modperl_env_tie(mg_flags); @@ -112,7 +128,16 @@ } } + MP_TRACE_e(MP_FUNC, "\n\t[%s/0x%lx/%s]" + "[EMAIL PROTECTED] scfg->SetEnv} = values scfg->SetEnv;", + modperl_pid_tid(p), modperl_interp_address(aTHX), + modperl_server_desc(s, p)); modperl_env_table_populate(aTHX_ scfg->SetEnv); + + MP_TRACE_e(MP_FUNC, "\n\t[%s/0x%lx/%s]" + "[EMAIL PROTECTED] scfg->PassEnv} = values scfg->PassEnv;", + modperl_pid_tid(p), modperl_interp_address(aTHX), + modperl_server_desc(s, p)); modperl_env_table_populate(aTHX_ scfg->PassEnv); } @@ -147,6 +172,7 @@ SV *sv = newSVpvn(ent->val, ent->vlen); hv_store(hv, ent->key, ent->klen, sv, ent->hash); + MP_TRACE_e(MP_FUNC, "$ENV{%s} = \"%s\";", ent->key, ent->val); modperl_envelem_tie(sv, ent->key, ent->klen); ent++; } @@ -161,15 +187,17 @@ if (MpReqSETUP_ENV(rcfg)) { return; } - - MP_TRACE_g(MP_FUNC, "populating environment for %s\n", r->uri); - + /* XXX: might want to always do this regardless of PerlOptions -SetupEnv */ modperl_env_configure_request(r); ap_add_common_vars(r); ap_add_cgi_vars(r); + MP_TRACE_e(MP_FUNC, "\n\t[%s/0x%lx/%s%s]" + "[EMAIL PROTECTED] r->subprocess_env} = values r->subprocess_env;", + modperl_pid_tid(r->pool), modperl_interp_address(aTHX), + modperl_server_desc(r->server, r->pool), r->uri); modperl_env_table_populate(aTHX_ r->subprocess_env); #ifdef MP_COMPAT_1X @@ -185,6 +213,9 @@ EnvMgLen = -1; #ifdef MP_PERL_HV_GMAGICAL_AWARE + MP_TRACE_e(MP_FUNC, "[%s/0x%lx] tie %%ENV, $r\n\t (%s%s)", + modperl_pid_tid(r->pool), modperl_interp_address(aTHX), + modperl_server_desc(r->server, r->pool), r->uri); SvGMAGICAL_on((SV*)ENVHV); #endif } @@ -194,6 +225,9 @@ EnvMgObj = NULL; #ifdef MP_PERL_HV_GMAGICAL_AWARE + MP_TRACE_e(MP_FUNC, "[%s/0x%lx] untie %%ENV; # from r\n\t (%s%s)", + modperl_pid_tid(r->pool), modperl_interp_address(aTHX), + modperl_server_desc(r->server, r->pool), r->uri); SvGMAGICAL_off((SV*)ENVHV); #endif } @@ -248,10 +282,34 @@ apr_table_set(r->subprocess_env, hv_iterkey(entry, &keylen), SvPV(hv_iterval((HV*)sv, entry), n_a)); + MP_TRACE_e(MP_FUNC, "[%s/0x%lx] localizing: %s => %s", + modperl_pid_tid(r->pool), + modperl_interp_address(aTHX), + hv_iterkey(entry, &keylen), + SvPV(hv_iterval((HV*)sv, entry), n_a)); } } } else { +#ifdef MP_TRACE + HE *entry; + STRLEN n_a; + + MP_TRACE_e(MP_FUNC, + "\n\t[%lu/0x%lx] populating %%ENV:", + (unsigned long)getpid(), modperl_interp_address(aTHX)); + + hv_iterinit((HV*)sv); + + while ((entry = hv_iternext((HV*)sv))) { + I32 keylen; + MP_TRACE_e(MP_FUNC, "$ENV{%s} = \"%s\";", + modperl_pid_tid(r->pool), + modperl_interp_address(aTHX), + hv_iterkey(entry, &keylen), + SvPV(hv_iterval((HV*)sv, entry), n_a)); + } +#endif return MP_PL_vtbl_call(env, set); } @@ -264,8 +322,14 @@ if (r) { apr_table_clear(r->subprocess_env); + MP_TRACE_e(MP_FUNC, + "[%s/0x%lx] clearing all magic off r->subprocess_env", + modperl_pid_tid(r->pool), modperl_interp_address(aTHX)); } else { + MP_TRACE_e(MP_FUNC, + "[%s/0x%lx] %%ENV = ();", + modperl_pid_tid(r->pool), modperl_interp_address(aTHX)); return MP_PL_vtbl_call(env, clear); } @@ -280,8 +344,19 @@ MP_dENV_KEY; MP_dENV_VAL; apr_table_set(r->subprocess_env, key, val); + MP_TRACE_e(MP_FUNC, "[%s/0x%lx] r->subprocess_env set: %s => %s", + modperl_pid_tid(r->pool), + modperl_interp_address(aTHX), key, val); } else { +#ifdef MP_TRACE + MP_dENV_KEY; + MP_dENV_VAL; + MP_TRACE_e(MP_FUNC, + "[%lu/0x%lx] $ENV{%s} = \"%s\";", + (unsigned long)getpid(), + modperl_interp_address(aTHX), key, val); +#endif return MP_PL_vtbl_call(envelem, set); } @@ -295,8 +370,17 @@ if (r) { MP_dENV_KEY; apr_table_unset(r->subprocess_env, key); + MP_TRACE_e(MP_FUNC, "[%s/0x%lx] r->subprocess_env unset: %s", + modperl_pid_tid(r->pool), + modperl_interp_address(aTHX), key); } else { +#ifdef MP_TRACE + MP_dENV_KEY; + MP_TRACE_e(MP_FUNC, "[%lu/0x%lx] delete $ENV{%s};", + (unsigned long)getpid(), + modperl_interp_address(aTHX), key); +#endif return MP_PL_vtbl_call(envelem, clear); } @@ -314,13 +398,28 @@ if ((val = apr_table_get(r->subprocess_env, key))) { sv_setpv(sv, val); + MP_TRACE_e(MP_FUNC, + "[%s/0x%lx] r->subprocess_env get: %s => %s", + modperl_pid_tid(r->pool), + modperl_interp_address(aTHX), key, val); } else { sv_setsv(sv, &PL_sv_undef); + MP_TRACE_e(MP_FUNC, + "[%s/0x%lx] r->subprocess_env get: %s => undef", + modperl_pid_tid(r->pool), + modperl_interp_address(aTHX), key); } } else { /* there is no svt_get in PL_vtbl_envelem */ +#ifdef MP_TRACE + MP_dENV_KEY; + MP_TRACE_e(MP_FUNC, + "[%lu/0x%lx] there is no svt_get in PL_vtbl_envelem: %s", + (unsigned long)getpid(), + modperl_interp_address(aTHX), key); +#endif } return 0;