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;
  
  
  

Reply via email to