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;
}
}