dougm       2002/09/05 11:05:52

  Modified:    src/modules/perl modperl_module.c
  Log:
  automate SvREFCNT-ing used with modperl_module_cmd_fetch a bit
  
  Revision  Changes    Path
  1.7       +9 -7      modperl-2.0/src/modules/perl/modperl_module.c
  
  Index: modperl_module.c
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_module.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- modperl_module.c  4 Sep 2002 17:11:22 -0000       1.6
  +++ modperl_module.c  5 Sep 2002 18:05:52 -0000       1.7
  @@ -499,7 +499,10 @@
   {
       const char *errmsg = NULL;
   
  -    *retval = Nullsv;
  +    if (*retval) {
  +        SvREFCNT_dec(*retval);
  +        *retval = Nullsv;
  +    }
   
       if (sv_isobject(obj)) {
           int count;
  @@ -572,7 +575,7 @@
       cmds = apr_array_make(p, fill+1, sizeof(command_rec));
   
       for (i=0; i<=fill; i++) {
  -        SV *val;
  +        SV *val = Nullsv;
           STRLEN len;
           SV *obj = AvARRAY(module_cmds)[i];
           modperl_module_cmd_data_t *info = modperl_module_cmd_data_new(p);
  @@ -586,7 +589,6 @@
           }
   
           cmd->name = apr_pstrdup(p, SvPV(val, len));
  -        SvREFCNT_dec(val);
   
           if ((errmsg = modperl_module_cmd_fetch(aTHX_ obj, "args_how", &val))) {
               /* XXX default based on $self->func prototype */
  @@ -600,7 +602,6 @@
                   cmd->args_how =
                       modperl_constants_lookup_apache(SvPV(val, len));
               }
  -            SvREFCNT_dec(val);
           }
   
           if (!modperl_module_cmd_lookup(cmd)) {
  @@ -614,7 +615,6 @@
           }
           else {
               info->func_name = apr_pstrdup(p, SvPV(val, len));
  -            SvREFCNT_dec(val);
           }
   
           if ((errmsg = modperl_module_cmd_fetch(aTHX_ obj, "req_override", &val))) {
  @@ -628,7 +628,6 @@
                   cmd->req_override =
                       modperl_constants_lookup_apache(SvPV(val, len));
               }
  -            SvREFCNT_dec(val);
           }
   
           if ((errmsg = modperl_module_cmd_fetch(aTHX_ obj, "errmsg", &val))) {
  @@ -638,7 +637,6 @@
           }
           else {
               cmd->errmsg = apr_pstrdup(p, SvPV(val, len));
  -            SvREFCNT_dec(val);
           }
   
           cmd->cmd_data = info;
  @@ -646,7 +644,11 @@
           /* no default if undefined */
           if (!(errmsg = modperl_module_cmd_fetch(aTHX_ obj, "data", &val))) {
               info->cmd_data = apr_pstrdup(p, SvPV(val, len));
  +        }
  +
  +        if (val) {
               SvREFCNT_dec(val);
  +            val = Nullsv;
           }
       }
   
  
  
  


Reply via email to